我有一个辅助函数可以访问 API 并按 ID 获取页面。它使用 async/await,我正在尝试使用 try catch 处理错误。
为了测试错误处理,我故意给它一个不存在的 ID。
这是方法:
const findPage = async (req, res, pageId) => {
let document
try {
let response = await getByID(pageId)
if (!response) throw Error('No Response')
return document
} catch (error) {
console.log(error) // I can see the error is being thrown.. I am purposefuly giving it an id that does not exist
return error
}
}
它确实像我预期的那样抛出错误。但是,我正在使用快速路由在应用程序的另一部分调用该函数。
Router.route('/page/:id').get(async (req, res) => {
let results
try {
results = await findPage(req, res, req.params.id) // This Function Returns an error
// Yet we still get results
res.json({results, msg: 'WHY?'})
} catch (error) {
res.send(error)
}
})
在同一个路由器文件中,我也尝试向这个路由器添加一些特定的中间件,但由于没有错误,它永远不会被触发。
Router.use((err, req, res, next) => {
if (err) {
console.log('holy error')
} else {
console.log('no error')
}
next(err)
})
当调用自身的函数返回错误时,express API 调用如何返回结果而不是错误?