如何在sails.js helpers中处理非显式错误?

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

我想知道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中,我应该可以使用 .intercept() 而不是.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对象的错误处理情况,而不是一般的错误处理。在文档中 它说,如果过滤器参数是

不提供,所有的错误都会被拦截。

还是说只有db查询才会这样?因为.intercept()文档部分就在那个子类中。

sails.js waterline
1个回答
0
投票

你可以用 "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(`/`);
}
© www.soinside.com 2019 - 2024. All rights reserved.