gpt4 book ai didi

javascript - 带有可选第一个参数的表达包罗万象的路线

转载 作者:行者123 更新时间:2023-12-02 23:24:28 24 4
gpt4 key购买 nike

如何实现将在每个请求上调用的路由(中间件),但同时它应该捕获可选的lang参数。

到目前为止,我尝试了下面的代码,但它不起作用。最有可能出现路径匹配问题 (/:lang*?)。在下面的代码中 lang 参数未定义:

const SUPPORTED_LOCALES = ['en', 'fr', 'de'];

expressServer.use('/:lang*?', function(req, res, next) {
// check if known locale, if no then fallback to 'en'
const locale = SUPPORTED_LOCALES.includes((req.params.lang)) ? req.params.lang : 'en';
req.locale = locale;
next();
}

这个中间件应该捕获所有请求,甚至只是域名(如果未提供区域设置,它将回退到默认区域设置 en):

example.com
example.com/de/blog/2
example.com/fr
example.com/en
example.com/en/blog/1
example.com/blog/1

最佳答案

您可以只使用 app.use 而不使用路径

app.use(function (req, res, next) {
console.log('Time: %d', Date.now())
next()
})

示例来自 Express app.use

不确定这是否有效,但您的情况下的语言代码有 2 个字符长。因此,使用 regex 作为第一个参数,您可以使用两个字符指定所有路由。

app.use('/\/^([a-z]){2}$/', function (req, res, next) {
console.log('Language:', req.originalUrl.substr(1));
next();
})

req.originalUrl 返回例如 /en。要删除斜杠,只需使用 substr 将其删除即可。

关于javascript - 带有可选第一个参数的表达包罗万象的路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56804433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com