要求文件内的请求

我正在玩Node.js,我想知道我在做什么可以被认为是最佳的做法,我还有很多东西要学。

我试图通过创build更多的JSON文件,然后根据HTTP标头(语言)加载实现多语言布局。 我正在做的是这样的:

exports.index = function(req, res){ try { var words = require('../languages/' + req.headers["accept-language"].substr(0, 2).toLowerCase()); } catch(err) { console.log("no language found - falling back to english"); var words = require('../languages/en'); } res.render('index', { language: words }); }; 

现在,我很确定这里有什么问题。 因为我认为要求只应该做一次,而且我要求每一个要求。 但是,我想不出任何其他的方式,因为我需要访问请求头中的语言。

有任何想法吗?

提前致谢。

您需要两个不同的文件。 所以我不确定你为什么认为你重复自己。

最后,您应该将语言文件转换为位于本地node_modules文件夹中的实际模块,或与您的应用程序使用的Node_modules相同。

这样你可以要求你这样的语言模块。

 var language = require('language'); 

在你的语言模块里面应该有一个索引文件和lib目录。

index.js

 exports.en= require('./lib/en'), exports.fr= require('./lib/fr'), exports.de= require('./lib/de'), 

那么你将能够像这样使用你的模块。

 exports.index = function(req, res){ language = require('language'); try { var words = language[req.headers["accept-language"].substr(0, 2).toLowerCase()](); } catch(err) { console.log("no language found - falling back to english"); var words = language.en(); } res.render('index', { language: words }); }; 

用这个replace上面。

 exports.index = function(req, res){ var language = require('language'); supported_languages = ['en', 'fr' , 'de'], accept_language = req.headers["accept-language"].substr(0, 2).toLowerCase(); if(supported_languages.indexOf(accept_language) !== -1){ var words = language[accept_language](); }else { console.log("no language found - falling back to english"); var words = language.en(); } res.render('index', { language: words }); }; 

对于国际化,我会强烈推荐i18n。

国际化节点