nodejs的用法

时间:2019-02-06 02:45:09

标签: node.js express

我有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);是否停止函数流?

谢谢!

1 个答案:

答案 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()下面的代码将无法访问。