我有API处理帖子请求,如下(简化):
myFunc(req: express.Request, res: express.Response, next){
let err = 'err detected!';
//validateSometing() returns a boolean value, true if validation pass false otherwise
if(!validateSomething()){
res.status(500).json(err);
return next(err);
}
//more code...logic if validation pass
}
我想知道在将状态和相关的err发送回客户端之后是否需要return next(err);
或return;
才能停止功能流程。换句话说,res.status(500).json(err);
是否停止函数流?
谢谢!
答案 0 :(得分:0)
next()
是应用程序请求-响应周期中的中间件功能。您必须调用next()
才能将控制权传递给下一个中间件功能。否则,该请求将被挂起。
res.json(), res.send()
是用于将响应发送到客户端应用程序的快速功能。换句话说,它使用了用于构建HTTP响应的此功能。
return
关键字从您的函数返回,从而结束其执行。这意味着之后的任何代码行都不会执行。
注意: next()
和res.send()
都不会终止您的函数。添加return
会在触发回调后停止函数执行。
使用return
是为了确保触发回调后执行停止。在某些情况下,您可能要使用res.send
,然后再做其他事情。
示例:
app.use((req, res, next) => {
console.log('This is a middleware')
next()
console.log('This is first-half middleware')
})
app.use((req, res, next) => {
console.log('This is second middleware')
next()
})
app.use((req, res, next) => {
console.log('This is third middleware')
next()
})
您的输出将是:
This is a middleware
This is second middleware
This is third middleware
This is first-half middleware
也就是说,它在所有中间件功能完成后运行next()
下面的代码。
但是,如果您使用return next()
,它将立即跳出回调,并且回调中return next()
下面的代码将无法访问。