繁体   English   中英

在Node.js中将内部服务器错误消息转换为客户端可读消息的最佳实践是什么?

[英]What are some best practices for translating internal server error messages to client readable messages in Node.js?

可以说我有几个处理身份验证的模块,每个身份验证提供者一个模块(Google,Facebook,Email等)。

我也有一个使用这些模块来验证用户请求的路由器。

现在让我们说,其中一位用户尝试进行身份验证,而auth模块之一则看到令牌已过期。 我在带有内部消息“令牌已过期”或类似内容的模块内部创建错误,然后将其传递回调用路由器模块。 路由器希望发送回客户端可读的消息,例如“您的会话已过期,请尝试注销并再次登录”

因此,问题在于将错误消息从其内部表示形式转换为客户端可读版本的位置。

我有两种选择:

  1. 在每个身份验证模块中执行此操作,因为他们最清楚问题所在。 缺点-破坏了模块抽象性,该模块现在必须处理客户端消息。
  2. 在路由器上进行。 缺点-需要创建错误代码/名称,并使用带有一长串case参数的错误处理程序,以将每个内部错误映射到客户端错误。 可能还需要处理特定的身份验证模块错误,例如,在电子邮件身份验证中,电子邮件中的激活链接可能过期,并且所需的操作与Facebook过期的令牌不同。

有什么最佳实践可以解决此问题,是否有以某种方式提供帮助的Node / Express模块​​?

非常感谢

我认为一个好的解决方案是使用Express中间件进行错误处理。

function (err, req, res, next) {
   // error translation and response sending
}

使用lang文件夹,其中索引文件公开特定的语言消息文件。

假设英语eng.js应该像这样:

module.exports = {
    VALIDATION_ERROR_IN: 'Validation error in',
    NOTHING_UPDATED: 'Nothing Updated',
    UPDATE_NON_EXISTING_DOCUMENT_FAILED: 'can\'t update a non-existing document',
    ID_REQUIRED: '\'_id\'is required',
    USERID_REQUIRED: '\'userId\'is required'
}

和index.js应该像这样:

module.exports = require('./eng');

如果您需要任何其他语言,则可以创建新文件(例如eng.js),其中对象键保持不变,但值是特定于语言的。

捕获服务器错误,并按以下方式使用它:

var message=require('message') // suppose the folder name is 'message'
    //....    
res.send(message.FIELD_REQUIRED);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM