我正试图弄清楚Sails.js中的错误处理是如何工作的。不幸的是,文档中的代码示例没有涵盖这个用例。
问题是我一直得到这个错误:
UsageError: `.intercept()` handler returned `undefined`, but this should never happen.
Regardless, here is a summary of the original underlying error:
现在我所要做的就是调用一个助手,如果它失败了,那么我想捕捉错误(任何(,记录它并运行一些代码。如果我不使用Sails,而是正常的承诺,我会这样处理:
await helper().catch((err) => { // run some code }
在Sails中,我应该能够使用.entercept((而不是.catch((
我的代码如下:
// ExportController.js
const csv = await sails.helpers.files.convertToCsv(data)
.intercept((err) => {
sails.log.error(err)
req.addFlash('error_messages', 'Error parsing data to csv!')
return res.redirect(`/`);
})
// convert-to-csv.js
if (!Array.isArray(inputs.data)) {
throw new Error('invalid inputs.data type: ' + typeof inputs.data)
};
现在我该如何避免出现此错误?代码示例仅显示处理显式添加到exits对象的错误的情况,而不显示一般错误处理。在文档中,它说如果过滤器参数是
未提供,所有错误都将被拦截。
或者这只适用于数据库查询吗?因为.entercept((doc部分在该子类别中。
您可以使用"throw'errorCode';"例如:
设置出口:
exits {
errorWithCsvFile: {
responseType: 'badRequest'
}
}
const csv = await sails.helpers.files.convertToCsv(data)
.intercept(‘somethingWrongCode’, ‘errorWithCsvFile’)
... // Other handles
.intercept(err => new Error(err))
备选方案:
try {
...
const csv = await sails.helpers.files.convertToCsv(data)
.intercept((err) => {
sails.log.error(err)
req.addFlash('error_messages', 'Error parsing data to csv!')
throw 'badRequest';
})
...
} catch (err) {
sails.log.err(err);
return res.redirect(`/`);
}