猿问

根据 req.headers['accept-language'] 导入动态文件夹

我正在尝试实现一项新功能 - 使用 Nodejs 发送多语言邮件。


我有这样的目录结构:


mail-templates

__index.js

__jp

____index.js

____mail1.js

____mail2.js

__en

____index.js

____mail1.js

____mail2.js

在indexof enand 中jp,我将导入和导出当前文件夹中的所有文件


在indexof 中mail-teamplates,我想根据req.headers['accept-language']动态导入文件夹,如下所示:


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

我的问题:我怎么能做到这一点?我如何在此处获取接受语言以动态导入文件夹?


慕田峪7331174
浏览 218回答 2
2回答

繁星淼淼

不建议在 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    ...});

慕莱坞森

您需要在请求处理程序函数中 require 模块。如果使用快速服务器,您可以尝试这样的操作。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标题的响应//Fetching data using laguage: esfetch("https://UsedSelfishVisitor--five-nine.repl.co", {  method:"GET",  headers: {  language: "es"}}).then(res => res.json()).then(data => console.log(data));//Fetching data using language: enfetch("https://UsedSelfishVisitor--five-nine.repl.co", {  method:"GET",  headers: {  language: "en"}}).then(res => res.json()).then(data => console.log(data));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答