标题发送后,Express处理程序不能404
我有一个快速的应用程序,我已经添加了新的路线:
这是路线:
var router = require('express').Router(); router.post('/',function (req, res, next) { res.send("Ok"); }); module.exports = router;
现在,我对这个邮政路线的每一个请求,即时通讯快递日志:
finalhandler cannot 404 after headers sent
当调用DB时,预处理程序确实为每个请求发送404,
所以即时猜测,有一些与我的职能和最终处理程序的种族
任何人有anyidea?
更新:
这是index.js
var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var expressValidator = require('express-validator'); var _ = require('underscore'); var stringUtils = require("underscore.string"); var mongoose = require('mongoose'); mongoose.connect(config.mongoUrl); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use(expressValidator()); var middleware = require('./middleware/authentication-middleware'); app.use(middleware.allowCrossDomains); app.all('*', loginMiddlewareSkip); var skipAuthPaths = ['/auth/fb', '/auth/login', '/auth/signup', '/auth/forgot', '/auth/reset']; function loginMiddlewareSkip(req, res, next) { if (stringUtils.startsWith(req.path, "/auth") || req.path == '/status'){ return next(); } middleware.ensureAuthenticated(req,res,next); next(); } app.use('/passport', require('./routes/passport')); app.use('/auth', require('./routes/authenticate')); app.listen(3000, function() { console.log('Express server listening on port ' + 3000); });
上面的文件是routes/passport
,auth文件工作正常
好的,问题出在我的中间产品之一上:
在我的loginMiddlewareSkip
函数中,我正在调用middleware.ensureAuthenticated(req,res,next)
如果path需要authentication,在那个函数里我调用next()
如果authentication是成功的,你可以看到我之后再次调用next()调用ensureAuthenticated
函数。
从loginMiddlewareSkip
删除next()
解决了这个问题