2015-09-21 4 views
-1

Я писал свое первое web-приложение node.js/express test и столкнулся с проблемой маршрутизации (думаю, так, но я не уверен) при разработке. Вот некоторая отладочная информация о моей проблеме. Я использую Express 4 и пытается подключиться маршрутизатор, как это:node.js, express4, исключение маршрутизации ejs

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

журнала Ошибка: файл

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

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

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(); 
    }); 
}; 
+0

Что на линии 77 app.js? –

+0

app.errorHandler() (err, req, res, next); , но я определил его как этот var errorhandler = require ('errorhandler'); –

+0

и errorHandler - пакет npm? –

ответ

0

Я не уверен, что вы здесь делаете, но app.errorHandler не определено. (), которые следуют app.errorHander, вызывают сообщение об ошибке TypeError: undefined is not a function.

Кроме того, вам нужен errorhandler с этим кодом var errorhandler = require('errorhandler');, но вы ссылаетесь на него как errorHandler. Ваш корпус не соответствует.

Это не имеет никакого отношения к экспресс-маршрутизатору или ejs.

1

Эта строка кода должна быть

if (app.get('env') == 'development') { 
    app.use(errorhandler()); 
} else { 
    log.error(err); 
    err = new HttpError(500); 
    res.sendHttpError(err); 
} 
Смежные вопросы