我有此代码适用于路线:
const langAccess = ['en', 'ru'];
// ...
router.use('/test', (req, res, next) =>
{
let langGet = req.query.lang;
let langCookie = req.language?.substr(0, 2);
let lang = langAccess.find(lang => lang == langGet) || langAccess.find(lang => lang == langCookie) || 'en';
if (langGet != lang)
{
let newSeach = new URLSearchParams(req._parsedUrl.search);
newSeach.set('lang', lang);
res.redirect(`?${newSeach.toString()}`);
}
else
{
next();
}
});
它检查和/或将页面的语言添加到 get 参数,它不是在所有路由中使用,而是在许多路由中使用。并且每次代码本质上是重复的,相同的语言数组。
而且我不知道这个功能最好在哪里取出,请告诉我。
这段代码有什么可以改进的?
很简单,您已经在使用中间件,现在您需要确保匹配项暴露给所需的一组路由。
例如 - 现在指定
/test/
,这意味着所有以此序列开头的路由都将使用它,如果你想扩展它 - 你应该改变它,例如 '/' - 对于所有路由。在官方文档中,您可以阅读如何使用应用程序或路由级中间件。在这种情况下,无需将相同的结构复制到多个文件中。