使用角度转换处理API错误的最佳实践

时间:2016-04-12 14:17:59

标签: angularjs node.js error-handling angular-translate restify

我有一个API<> SPA架构。

但我并不确切知道翻译的位置,特别是在发送错误时。

我更愿意在我的角度应用程序中翻译文本(i18n等)。 API应该只发送英文文本。

但我不知道如何

想象一下这样的错误信息:(nodejs + restify)

server.get('/api/', function (req, res, next) {
    return next(new server.errors.UnauthorizedError('You are not authorized'));
});

这将发送一个带有json的401。

如果API只说英语,我怎样才能在SPA中最好地翻译它?

我怎样才能将其作为其中一种翻译方法:

<span>{{message | translate}}</span>

<span>{{lang.message}}</span>

当然我在Angular使用$ translateProvider并且在其中有一个包含翻译的定位文件。

发送语言密钥没有别的办法吗?像这样:

server.get('/api/', function (req, res, next) {
    return next(new server.errors.UnauthorizedError('NOT_AUTHORIZED_ERROR'));
});

有了这个,我可以有一个locate-en.json文件,如:

{
    errors: {
        NOT_AUTHORIZED_ERROR: "You are not authorized"
    }
}

我发现这种情况并不常见。

2 个答案:

答案 0 :(得分:2)

您有两个选择:要么您认为您的客户首先知道API可以抛出的所有错误。通常情况下,如果API和客户端都由同一个团队实现。在这种情况下,让您的API返回一个错误对象,其中包含代码

{
    "code": "unauthorized",
    "message": "some reason in english, usefull for debugging/logging"
}

然后使用此代码翻译错误客户端:

<span>{{error.code | translate}}</span>

第二个选项是让API转换错误消息。如果API可以在不知道客户端的情况下发展(并抛出新错误),请使用此选项。当然,在这种情况下,您受限于API支持的语言。

答案 1 :(得分:2)

如何将带有代码和消息的dictonary放入$ translateProvider并从本地存储中读取错误,如下所示:

    app.config(['$translateProvider', function ($translateProvider) { 
    $translateProvider.translations('en', {
       error : 'messageEN'
    })
    $translateProvider.translations('de', {
        error : 'messageDE'
    })
    $translateProvider.preferredLanguage('en');
    // remember language
   $translateProvider.useLocalStorage();
}]);