@JIakki

Как сделать функцию более расширяемой в будущем?

Как сделать функцию более простой и расширяемой в будущем ?
var langs, lang, words;

module.exports = function (req, res, next) {
	if(req.session.lang) {
		lang = req.session.lang
	} else {
		langs = req.headers["accept-language"];
		lang = langs[0] + langs[1];
	}

	res.locals = require('./langs/' + lang + '.json')

	next();
}

зарание спасибо
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
1. Как это Вы так быстро распарсили req.headers, там может быть такое, например:
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Language: da, en-gb;q=0.8, en;q=0.7
Accept-Language: cmn-Hans-CN
Accept-Language: i-enochian
Accept-Language: cel-gaulish
Accept-Language: *

или даже более сложное, см. спецификацию:
https://tools.ietf.org/html/bcp47
www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4

Чтобы правильно распарсить есть библиотеки:
https://github.com/gagle/node-bcp47
https://github.com/tinganho/node-accept-language

2. Делать require внутри обработчика это ужас. Это синхронная операция чтения из файла, которую нужно делать при старте сервера. Нужно положить все языки в один файл и прочитать его при старте, а потом обращаться к справочнику в памяти.

3. Middleware detected, ну и конечно же не использовать next, если это конечно более-менее серьезный нагруженный проект в продакшене, а не прототип и не макет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы