使用angular度转换处理API错误的最佳做法
我有一个API <> SPA架构。
但我不知道在哪里翻译,特别是当发送错误。
我宁愿只在我的angular度应用程序翻译文本(i18n等)。 API只能发送英文文本。
但我不知道如何
想象一下这样的错误消息:(nodejs + restify)
server.get('/api/', function (req, res, next) { return next(new server.errors.UnauthorizedError('You are not authorized')); });
这将发送一个401与json的身体。
如果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" } }
我觉得这种不寻常的
把代码和消息放在$ translateProvider中,并从本地存储中读取错误,如下所示:
app.config(['$translateProvider', function ($translateProvider) { $translateProvider.translations('en', { error : 'messageEN' }) $translateProvider.translations('de', { error : 'messageDE' }) $translateProvider.preferredLanguage('en'); // remember language $translateProvider.useLocalStorage(); }]);
你有两个select:要么你认为你的客户端知道API可以抛出的所有错误。 如果API和客户端都是由同一个团队实现的,通常情况下就是这样。 在这种情况下,让你的API返回一个包含代码的错误对象:
{ "code": "unauthorized", "message": "some reason in english, usefull for debugging/logging" }
然后使用这段代码来翻译客户端的错误:
<span>{{error.code | translate}}</span>
第二个选项是让API转换错误消息。 如果API可以在不知道客户端的情况下发展(并引发新的错误),则使用此选项。 当然,在这种情况下,您只能使用API支持的语言。