我有API来处理POST请求如下(简化):
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
}
我想,如果需要return next(err);
或return;
发送状态之后停止功能流程和相关犯错回客户端就知道了。换句话说,不res.status(500).json(err);
停止功能流程?
谢谢!
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()
的代码将无法访问。