Требуется файл внутри запроса
Я играю с Node.js, и мне было интересно, можно ли считать то, что я делаю, лучшей практикой, у меня все еще есть много вещей, которые нужно изучить.
Я пытаюсь реализовать многоязычную компоновку, создавая больше файлов 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 });
};
Я уверен, что там что-то не так. как я думаю, требование должно быть сделано только один раз, и я требую это с каждым запросом. Но я не могу думать ни о каком другом пути, так как мне нужно получить доступ к языку в заголовке запроса.
Есть идеи?
Заранее спасибо.
2 ответа
Вам требуются два разных файла. Поэтому я не уверен, почему вы думаете, что вы повторяетесь.
В конце концов вы должны превратить ваш языковой файл в настоящий модуль, который находится в локальной папке 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 });
};
ЗАМЕНИТЕ выше этим.
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 });
};