管理 Restify 中的错误

Posted

技术标签:

【中文标题】管理 Restify 中的错误【英文标题】:Manage errors in Restify 【发布时间】:2013-08-19 11:40:46 【问题描述】:

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

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

谢谢

【问题讨论】:

【参考方案1】:
    立即处理产生错误的地方。 next(err) 真正的意思是 res.send(err)。它不是throw err 的替代品。如果您需要登录并关闭,请将其传递给错误处理模块,而不是将其塞入next(err) 中,这样会被吞下。 server.on('uncaughtException'... 是您处理中间件/路由中抛出的任何错误的方式。只要您记住第一个准则,它就可以很好地实现此目的。 'uncaughtException' 不会被next(err) 调用触发。 formatters 是自定义发送给用户的错误消息的方式。它们绝对不是处理uncaughtException 中错误的可行替代方案,因为据推测,一旦您到达那里,您就会向用户发送您希望他们看到的错误......不一定最初产生的错误。见第 1 点。 与中间件无关的错误,记得使用process.on('uncaughtException'...

【讨论】:

感谢您撰写如此有用的概述,恕我直言,这将改进 restify 文档。【参考方案2】:
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."))
    
  ;
;

【讨论】:

以上是关于管理 Restify 中的错误的主要内容,如果未能解决你的问题,请参考以下文章

restify cors 飞行前未连接

将everyauth与restify一起使用

为啥要使用 Restify?

如何在 restify 上扩展 socket.io?

使用 restify (node.js) 提供静态文件

为 restify.js 实现基于令牌的身份验证的最佳方法是啥?