到目前为止,我已经将我的get和post处理程序定义(req, res)为参数,假设我将这些处理程序放在中间件链中,并确保在这些处理程序中正确处理任何响应和错误处理...因此它没关系,我没有提到任何参考next.
这是一种有效且明智的做法,或者next()即使(目前)之后没有任何事情发生,也总是要打电话是好的做法吗?例如,也许在将来你可能想要在这些路线之后做一些处理......或者可能有一个原因我还没有遇到为什么总是打电话是好的做法next().
例如,快速路由指南中有以下简单示例:
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from B!')
})
Run Code Online (Sandbox Code Playgroud)
当然,我理解这是一个非常简单的例子来说明处理程序可以链接,并不打算为get处理程序提供完整的框架,但是如果next在第二个处理程序中定义和使用它会更好,如下所示?
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res, next) {
res.send('Hello from B!')
next()
})
Run Code Online (Sandbox Code Playgroud)
或者,实际上通常的做法是假设将响应发送回客户端的处理函数不应该调用next()...即,假设链应该在实际发送响应的处理程序结束?
或者在这一点上没有既定的做法?
我甚至想知道是否通常不会在get处理程序中发送任何响应,而是将其推迟到后面的专用响应处理程序...我的意思是OK响应处理程序而不是错误响应处理程序(对此似乎通常的做法是定义一个最终的错误处理程序并调用next(err)).因此,在非错误情况下,您将调用next()并在以下中间件中执行您res.status(200).send(req.mydata)在处理程序中req.mydata添加的位置get.
不可以.只有next()在您需要其他东西来处理请求时才应该打电话.通常它就像是说你的路线可能与那个请求相匹配,但你想表现得像它没有那样.例如,您可能有两个处理程序用于相同的路径:
app.get('/test', (req, res, next) => {
if (something) {
return next();
}
// handle request one way (1)
});
app.get('/test', (req, res) => {
// handle request other way (2)
});
Run Code Online (Sandbox Code Playgroud)
始终调用第一个匹配的处理程序,因此对于GET /test请求,将调用第一个处理程序,但它可以选择将控件传递给第二个处理程序,就好像第一个处理程序与请求不匹配一样.
请注意,如果第二个处理程序不打算将请求传递给下一个处理程序,则next它的参数中甚至没有.
如果没有第二个处理程序,则在404调用第一个处理程序时将使用标准处理程序next().
如果您传递参数,next()那么将调用错误处理中间件.
| 归档时间: |
|
| 查看次数: |
3141 次 |
| 最近记录: |