Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据请求标题导入动态文件夹[';接受语言';]_Javascript_Node.js_Middleware - Fatal编程技术网

Javascript 根据请求标题导入动态文件夹[';接受语言';]

Javascript 根据请求标题导入动态文件夹[';接受语言';],javascript,node.js,middleware,Javascript,Node.js,Middleware,我正在尝试实现一个新功能——使用Nodejs发送多语言邮件 我有如下目录结构: mail-templates __index.js __jp ____index.js ____mail1.js ____mail2.js __en ____index.js ____mail1.js ____mail2.js import * as Mail from `./${variable}` // variable are en or jp depending on accept-language 在e

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

我有如下目录结构:

mail-templates
__index.js
__jp
____index.js
____mail1.js
____mail2.js
__en
____index.js
____mail1.js
____mail2.js
import * as Mail from `./${variable}` // variable are en or jp depending on accept-language
en
jp
索引中,我将导入和导出当前文件夹中的所有文件

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

mail-templates
__index.js
__jp
____index.js
____mail1.js
____mail2.js
__en
____index.js
____mail1.js
____mail2.js
import * as Mail from `./${variable}` // variable are en or jp depending on accept-language

我的问题是:我怎样才能做到?如何在此处获取accept语言以动态导入文件夹?

您需要请求处理程序函数中的模块

如果使用express server,您可以尝试以下方法

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

您可以运行下面的代码段来检查基于
语言
标题的响应

//使用语言获取数据:es
取回(“https://UsedSelfishVisitor--five-nine.repl.co", {
方法:“获取”,
标题:{
语言:“es”
}
}).then(res=>res.json()).then(data=>console.log(data));
//使用以下语言获取数据:en
取回(“https://UsedSelfishVisitor--five-nine.repl.co", {
方法:“获取”,
标题:{
语言:“en”
}

}).then(res=>res.json()).then(data=>console.log(data))您需要请求处理程序函数中的模块

如果使用express server,您可以尝试以下方法

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

您可以运行下面的代码段来检查基于
语言
标题的响应

//使用语言获取数据:es
取回(“https://UsedSelfishVisitor--five-nine.repl.co", {
方法:“获取”,
标题:{
语言:“es”
}
}).then(res=>res.json()).then(data=>console.log(data));
//使用以下语言获取数据:en
取回(“https://UsedSelfishVisitor--five-nine.repl.co", {
方法:“获取”,
标题:{
语言:“en”
}

}).then(res=>res.json()).then(data=>console.log(data))不建议在http回调中执行此操作。 对于您的问题,最好的解决方案是导入所有可用的语言,并对每个请求使用首选语言

例如:

在您的
邮件模板/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
    ...
});

不建议在http回调中执行此操作。 对于您的问题,最好的解决方案是导入所有可用的语言,并对每个请求使用首选语言

例如:

在您的
邮件模板/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
    ...
});

我认为你做不到。您可以使用动态导入语法动态导入请求处理程序函数中的模块。。。。常量模块=等待导入('./模块')@尼廷我怎么能做到?你能给我一个示例演示吗?我认为你做不到。您可以使用动态导入语法动态导入请求处理程序函数中的模块。。。。常量模块=等待导入('./模块')@尼廷我怎么能做到?你能给我一个演示的例子吗?