node.js - 如何将 2 个逻辑块放在 nodeJs 中的同一异步路由中?
问题描述
我有一个调用服务的 post 路由,并有一个 .catch 处理程序来处理任何错误,代码本身也有 try-catch 块。但是,当我尝试仅调用另一个服务时,不需要第一个服务回调值,它会显示以下错误。例如。Await 不能在异步之外使用,或者当它进入条件 2 时,应用程序崩溃。这是结构-
router.post('/Students', async(req,res) => {
try{
...
studentService(req.body). then ((res)=>{
....// if res.body == 'Student'
.....
res.send(res.body)
}
})
.catch(error){
....
}
catch(err){
....
}
}
module.exports = router
现在我如何检查 res.body!='Student' 或 studentService 是否失败,然后转到调用另一个服务并拥有自己的错误处理程序的第二个块。(注意 - 它仅在第一个为 false 或所需值时执行未获得)
不知道在哪里以及如何放置它。
解决方案
我猜asynce
在您的示例代码中是一个错字。
在异步函数中,您可以使用 await 而不是 .then()。
此外,最好不要res
用 studentService 的输出覆盖您的路线。
而且,在一条路线中,您必须在所有情况下都做某事。发送结果,抛出错误,发送错误,等等。你的else
一面if
在你的样本中没有做任何事情。
您可以通过使用参数调用 express 来引发错误next()
。
所以试试这个。
const createError = require('http-errors')
...
router.post('/Students', async(req, res, next) => {
try {
...
const student = await studentService(req.body)
if (student.body === 'Student') {
...
return res.send(student.body)
}
catch (error) {
return next(error)
}
try {
const something = await someOtherService(req.body)
if (something.whatever === 'Underpaid Adjunct Faculty') {
return res.send(something.body)
}
} catch (error) {
return next(error)
}
return next(createError(400, 'Got an error'))
}
module.exports = router
推荐阅读
- azure - 在 Azure 门户中禁用触发的 WebJob
- java - Flyway 发现使用 H2 和 REST-ASSURED 的非空模式
- javascript - Javascript - 获取箭头函数中元素的索引
- javascript - 无法读取 null 的属性“updatePassword”
- spring-boot - 如何在 Spring Boot 中捕获 BeanDefinitionStoreException
- linux - Linux/AM3352:通过 sysfs 设置 gpio 似乎不起作用
- python - requests.json 和 json.loads() JSONDecodeError:预期值:第 1 行第 1 列(字符 0)
- html - 排列多个内容
2种方式的标签
- node.js - Azure Functions NodeJS Express 应用引发无法确定函数入口点错误
- html - 如何使用 twitter bootstrap 3 在同一行的部分之间放置箭头?