的的NodeJS使用表示未来

问题描述 投票:0回答:1

我有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);停止功能流程?

谢谢!

node.js express
1个回答
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()的代码将无法访问。

© www.soinside.com 2019 - 2024. All rights reserved.