Javascript 快车,使用相同的路线和不同的进口?

Javascript 快车,使用相同的路线和不同的进口?,javascript,node.js,express,Javascript,Node.js,Express,我正在努力使网站成为一个多语言的网站。我决定使用数据对象来填充所有必要的文本。我在这两种语言中使用的路径完全相同,只是在导入方面有所不同。有没有办法在不重复代码的情况下实现这一点 模板引擎是Express Handlebar,因此,如果有其他解决方案可以使网站多语言,我愿意实现它:) 提前感谢您抽出时间阅读本文 我的Sl语言路由中的代码: const express = require("express"), router = express.Router(), data = r

我正在努力使网站成为一个多语言的网站。我决定使用数据对象来填充所有必要的文本。我在这两种语言中使用的路径完全相同,只是在导入方面有所不同。有没有办法在不重复代码的情况下实现这一点

模板引擎是Express Handlebar,因此,如果有其他解决方案可以使网站多语言,我愿意实现它:) 提前感谢您抽出时间阅读本文

我的Sl语言路由中的代码:

const express = require("express"),
    router = express.Router(),
    data = require("../Views/res/lang/sl");

router.get("/", (req, res) => {
    data.Home = setupDataObject(data.Home, req.originalUrl, "Home");
    res.render("homepage", data.Home);
});

router.get("/About", (req, res) => {
    data.About = setupDataObject(data.About, req.originalUrl, "About");
    res.render("About", data.About);
});

function setupDataObject(data, url, active) {
    data.current = url.substring(4);
    data.active = { [active]: true };
    return data;
}
module.exports = router;
英文版呢

const express = require("express"),
    router = express.Router(),
    data = require("../Views/res/lang/en");

router.get("/", (req, res) => {
    data.Home = setupDataObject(data.Home, req.originalUrl, "Home");
    res.render("homepage", data.Home);
});

router.get("/About", (req, res) => {
    data.About = setupDataObject(data.About, req.originalUrl, "About");
    res.render("About", data.About);
});

function setupDataObject(data, url, active) {
    data.current = url.substring(4);
    data.active = { [active]: true };
    return data;
}
module.exports = router;

您可以使用url参数来处理区域设置,不是吗

const express = require("express"),
    router = express.Router();


router.get("/:locale/", (req, res) => {
    const data = require("../Views/res/lang/" + locale);
    data.Home = setupDataObject(data.Home, req.originalUrl, "Home");
    res.render("homepage", data.Home);
});

router.get("/:locale/About", (req, res) => {
    const data = require("../Views/res/lang/" + locale);
    data.About = setupDataObject(data.About, req.originalUrl, "About");
    res.render("About", data.About);
});

function setupDataObject(data, url, active) {    
    data.current = url.substring(4);
    data.active = { [active]: true };
    return data;
}

module.exports = router;

为什么不使用类似于
router.get(“/:locale/About“,…
的行为来代替实际的路由呢?在这里,我假设您知道语言,例如,我们有lang=[myLang]。然后您可以使用:
data=require(`../Views/res/lang/${lang}');
我可以获得“locale”吗导入部分的变量以及如何实现?如果我能做到这一点,我将永远爱你!任何不需要每条路由的方法?这似乎有点浪费,或者我只是在这里太努力了?我认为这是最好的方法。但是在思考中,如果你在路由器文件中提取路由,你可以用前缀“:locale”…作为前缀,但我认为efer这个。你要管理的唯一问题是管理真正的“/”路由,以便选择你要使用的区域设置。这已经在一个单独的文件中,在server.js中,根据你之前的建议,我这样使用它:
app.use(“/:locale”,slRouter)是的,就像这样,但我从来没有尝试过,这是一个想法,我很高兴知道结果…但是,如果它起作用,你可以使用app.params作为中间件:
(req,res,next)=>{req.data=require(../Views/res/lang/“+req.params.locale);next()}
之后,您可以直接使用req.data作为本地化数据;