Импортировать динамическую папку в зависимости от req.headers ['accept-language'] - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь реализовать новую функцию - отправка мультиязычной почты с помощью Nodejs.

У меня есть структура каталогов, подобная этой:

mail-templates
__index.js
__jp
____index.js
____mail1.js
____mail2.js
__en
____index.js
____mail1.js
____mail2.js

В index из en и jp, я буду импортировать и экспортировать все файлы в текущей папке

В index из mail-teamplates я хочу динамически импортировать папку в зависимости от req.headers ['accept-language'] вот так:

import * as Mail from `./${variable}` // variable are en or jp depending on accept-language

Мой вопрос: как я могу это сделать? Как я могу получить язык принятия здесь для динамического импорта папки?

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Не рекомендуется делать это внутри обратного вызова http. Лучшее решение вашей проблемы - импортировать все доступные языки и просто использовать предпочитаемый язык для каждого запроса.

Пример:

В вашем mail-templates/index.js:

import * as en from './en';
import * as es from './es';

const defaultLanguage = 'en';
const availableLanguages = { en, es }; 

function getMailByLanguage(language) {
    return availableLanguages[language] || availableLanguages[defaultLanguage];
}

module.exports = getMailByLanguage;

А когда вы хотите его использовать, просто сделайте это:

import * as MailTemplates from './mail-templates';

app.get("/", (req, res) => {
    const language = req.headers["language"];
    const Mail  = MailTemplates.getMailByLanguage(language);

    // Do your stuff's here
    ...
});
1 голос
/ 13 октября 2019

Вам необходимо указать модуль внутри функции обработчика запросов.

Если вы используете экспресс-сервер, вы можете попробовать что-то вроде этого.

app.get("/", async(req, res) => {
  const language = req.headers["language"] || "en";
  const module  = `./${language}.js`;
  const greet =  require(module);
  res.json(greet());
  }
)

Ссылка REPL. https://repl.it/repls/UsedSelfishVisitor

Вы можете запустить приведенный ниже фрагмент кода, чтобы проверить ответы на основе language header

//Fetching data using laguage: es

fetch("https://UsedSelfishVisitor--five-nine.repl.co", {
  method:"GET",
  headers: {
  language: "es"
}
}).then(res => res.json()).then(data => console.log(data));


//Fetching data using language: en
fetch("https://UsedSelfishVisitor--five-nine.repl.co", {
  method:"GET",
  headers: {
  language: "en"
}
}).then(res => res.json()).then(data => console.log(data));
...