17

我如何使用 NodeJS 的 Restify 管理我的 restful 服务器构建的所有错误?例如内部错误、数据库错误、验证、必需参数、未找到、已验证...以及 uncaughtException 并将自定义响应返回给浏览器?

我如何设计控制器之间的数据共享和错误?

谢谢

4

2 回答 2

30
  1. 立即处理您的错误,在它们产生的地方。next(err)真的是意思res.send(err)。它不是throw err. 如果您需要记录并关闭,请将其传递给错误处理模块,而不是将其塞进next(err)会被吞下的地方。
  2. server.on('uncaughtException'...是您如何处理中间件/路由中引发的任何错误。只要您记住第一个准则,它就可以很好地实现此目的。'uncaughtException'不会触发next(err)来电。
  3. formatters是自定义发送给用户的错误消息的方式。它们绝对不是处理 中的错误的可行替代方案uncaughtException,因为据推测,一旦您到达那里,您就会向用户发送您希望他们看到的错误......不一定是最初生成的错误。见第 1 点。
  4. 对于与中间件无关的错误,记得使用process.on('uncaughtException'...
于 2014-03-15T03:22:31.517 回答
0
const errs = require('restify-errors');
module.exports = (validator) => {
  return (req, res, next) => {
    if (req.body && req.body !== undefined) {
      const { error } = validator(req.body);
      if (error) {
        let errors = {};
        error.details.forEach((err) => {
          errors = { ...errors, [err.context.key]: err.message };
        });

        res.send(422, { ...new errs.UnprocessableEntityError('Validation error').body, error: errors })
        return next(new Error)
      }
      return next();
    } else {
      return next(new errs.UnprocessableEntityError("No data provided."))
    }
  };
};
于 2021-11-14T12:36:41.097 回答