Javascript 根据请求标题导入动态文件夹[';接受语言';]
我正在尝试实现一个新功能——使用Nodejs发送多语言邮件 我有如下目录结构: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
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
...
});
我认为你做不到。您可以使用动态导入语法动态导入请求处理程序函数中的模块。。。。常量模块=等待导入('./模块')@尼廷我怎么能做到?你能给我一个示例演示吗?我认为你做不到。您可以使用动态导入语法动态导入请求处理程序函数中的模块。。。。常量模块=等待导入('./模块')@尼廷我怎么能做到?你能给我一个演示的例子吗?