我正在运行使用async / await的Express应用程序。
我有两条看起来像这样的路线:
app.post('/add-item', item.bind(null, 'add'))
app.post('/remove-item', item.bind(null, 'remove'))
路由处理程序定义如下:
async function item (action, req, res, next) {
if (action === 'add') {
var result = await addItemFromDB()
res.json(result)
} else {
var result = await removeItemFromDB()
res.json(result)
}
}
因为我想避免在addItemFromDB
中包装removeItemFromDB
和try/catch
函数,所以我将它包装在辅助函数asyncRequest
中:
asyncRequest(async function item(req, res, next) {
if (action === 'add') {
var result = await addItemFromDB()
res.json(result)
} else {
var result = await removeItemFromDB()
res.json(result)
}
})
将asyncRequest
定义为:
function asyncRequest (handler) {
return function (req, res, next) {
return handler(req, res, next).catch(next)
}
}
但是,addItemFromDB
和removeItemFromDB
中出现的所有错误都会被默默地吞没。我发现的是,当我删除.bind(null, 'add')
等时,一切都按预期工作。
为什么会出现这种情况?
答案 0 :(得分:1)
你必须使用
app.post('/add-item', asyncRequest(item.bind(null, 'add')));
app.post('/remove-item', asyncRequest(item.bind(null, 'remove)));
可能您尝试在自定义asyncRequest
函数上调用item
,该函数包含4个参数,这不是asyncRequest
函数对其handler
参数的期望。