【发布时间】:2016-04-05 08:04:33
【问题描述】:
我是 Express 的新手,对它如何处理中间件有点困惑?所以基本上我有两个中间件,看起来像:
app.use(require('_/app/middlewares/errors/404'))
app.use(require('_/app/middlewares/errors/500'))
404
var log = require('_/log')
module.exports = function (req, res, next) {
log.warn('page not found', req.url)
res.status(404).render('errors/404')
}
500
var log = require('_/log')
module.exports = function (er, req, res, next) {
log.error(er.message)
res.locals.error = er
res.status(500).render('errors/500')
}
所以现在我想添加我的自定义中间件app.use(require('_/app/middleware/shareLocals')),它看起来像:
module.exports = function (req, res, next) {
res.locals.base_url = req.protocol + '://' + req.get('host');
next();
}
主要问题是现在当我尝试使用base_url 时,我得到404 错误...
那么Express 是如何理解中间件的作用的呢?那就是我的中间件和 404 之间没有视觉上的区别:
- 它接收相同的参数
- 里面没有
if's,只是抛出404错误
感觉Express 中的中间件是针对错误(将 err 作为第一个参数除外)和 404(当没有第一个 err 时)制作的......
附言 在路由之前或之后定义中间件有什么区别吗?
【问题讨论】: