简体   繁体   English

node.js、express4、ejs 路由异常

[英]node.js, express4, ejs routing exception

I've been writing my first node.js/express test web-app and faced a problem with routing (I think so, but I'm not sure) while developing.我一直在编写我的第一个 node.js/express 测试 web 应用程序,但在开发过程中遇到了路由问题(我认为是这样,但我不确定)。 Here are some debug info about my problem.以下是有关我的问题的一些调试信息。 I'm using Express 4 and trying to connect router like this:我正在使用 Express 4 并尝试像这样连接路由器:

 var router = express.Router();
 ...
 app.use(router);

Error log:错误日志:

TypeError: undefined is not a function
    at /Users/user1/Documents/work/habitsapp-node-app/app.js:77:11
    at Layer.handle_error (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/layer.js:71:5)
    at trim_prefix (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/index.js:310:13)
    at /Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/index.js:280:7
    at Function.process_params (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/index.js:330:12)
    at next (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/index.js:271:10)
    at next (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/route.js:121:14)
    at Layer.handle [as handle_request] (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/layer.js:97:5)
    at next (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/route.js:131:13)
    at Route.dispatch (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/layer.js:95:5)
    at /Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/index.js:277:22
    at Function.process_params (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/index.js:330:12)
    at next (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/lib/router/index.js:271:10)
    at SendStream.error (/Users/user1/Documents/work/habitsapp-node-app/node_modules/express/node_modules/serve-static/index.js:120:7)
    at SendStream.emit (events.js:107:17)

app.js file app.js 文件

var express = require('express');

var path = require('path');
var favicon = require('serve-favicon');
var errorhandler = require('errorhandler');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var config = require('config');
var mongoose = require('lib/mongoose');
var session = require('express-session');
var log = require('lib/log')(module);
var HttpError = require('error').HttpError;
var multer = require('multer');
var router = express.Router();

var app = express();


// view engine setup
app.engine('ejs', require('ejs-locals'));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static('public'));

var MongoStore = require('connect-mongo')(session);


app.use(session({
  secret: config.get('session:secret'),
  key: config.get('session:key'),
  cookie: config.get('session:cookie'),
  store: new MongoStore({mongoose_connection: mongoose.connection})

}));



app.use(require('middleware/sendHttpError'));
app.use(require('middleware/loadUser'));

app.use(router);
app.use(express.static(path.join(__dirname, 'public')));

require('routes')(app);



app.use(function(err, req, res, next) {
  if (typeof err == 'number') {
    err = new HttpError(err);
  }

  if (err instanceof HttpError) {
      res.sendHttpError(err);
  } else {
    if (app.get('env') == 'development') {
      app.errorHandler()(err, req, res, next);
    } else {
      log.error(err);
      err = new HttpError(500);
      res.sendHttpError(err);
    }
  }
});


var server = app.listen(config.get('port'), function () {
  var host = server.address().address;
  var port = server.address().port;

  log.info('HabitTracker app listening on port ' + config.get('port'));
});

loadUser.js加载用户.js

var User = require('models/user').User;

module.exports = function(req, res, next) {
    req.user = res.locals.user = null;

    if (!req.session.user) return next();

    User.findById(req.session.user, function(err, user) {
        if (err) return next(err);

        req.user = res.locals.user = user;
        next();
    });
};

This line of code should be这行代码应该是

  if (app.get('env') == 'development') {
  app.use(errorhandler());
} else {
  log.error(err);
  err = new HttpError(500);
  res.sendHttpError(err);
}

I'm not sure what you are doing here, but app.errorHandler is undefined.我不确定你在这里做什么,但app.errorHandler是未定义的。 The () that follow app.errorHander cause your error message TypeError: undefined is not a function .跟随app.errorHander()导致您的错误消息TypeError: undefined is not a function

Also, you require errorhandler with this code var errorhandler = require('errorhandler');此外,您需要带有此代码的errorhandler处理程序var errorhandler = require('errorhandler'); , but you reference it as errorHandler . ,但您将其引用为errorHandler Your casing doesn't match.你的外壳不匹配。

This has nothing to do with the express router or ejs.这与快速路由器或 ejs 无关。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM