使用可选的第一个参数来表示全部路线

时间:2019-06-28 09:34:43

标签: javascript node.js express

如何实现将在每个请求上调用的路由(中间件),但同时应捕获可选的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

1 个答案:

答案 0 :(得分: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删除。