Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何利用';朗"和"x27,;在中间件中_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何利用';朗"和"x27,;在中间件中

Javascript 如何利用';朗"和"x27,;在中间件中,javascript,node.js,express,Javascript,Node.js,Express,我有一个中间件: app .use('/:lang?', middleware.setLanguage) .use('/thanks/:lang?', middleware.setLanguage) .use('/forum/:lang?', middleware.setLanguage); 我想在每个有lang?的路由中使用一个名为setLanguage的函数,目前这段代码正在运行,但我相信这一点 有人知道怎么做吗?我在文档中搜索,但没有找到任何东西。使用.param预先处理参数,这样您就不

我有一个中间件:

app
.use('/:lang?', middleware.setLanguage)
.use('/thanks/:lang?', middleware.setLanguage)
.use('/forum/:lang?', middleware.setLanguage);
我想在每个有lang?的路由中使用一个名为setLanguage的函数,目前这段代码正在运行,但我相信这一点


有人知道怎么做吗?我在文档中搜索,但没有找到任何东西。

使用.param预先处理参数,这样您就不必在使用它的每个路由上都这样做。例如,这里有一个开始使用moongoose为产品crud构建查询:

  app.param('product_id', function (req, res, next, product_id) {
    req.product_id = new ObjectId(product_id);
    req.product = Product.findOne(req.product_id);
    next();
  });

  // update product
  app.put('/products/:product_id', function (req, res) {
    Product.findOneAndUpdate(req.product_id, req.body, function (err, product) {
      res.json(product.toObject());
    });
  });

  // get product by id
  app.get('/products/:product_id', function (req, res) {
    req.product.lean().exec(function (err, product) {
      res.json(product);
    });
  });

我的所有路线都不需要获取产品id并将其转换为ObjectId,因为我使用.param预先对所有路线进行了转换。

hm,我不知道这是否是一个好主意,因为用户可以更改语言,例如:如果他在论坛/espanol中,并且他想去论坛/英语,则此选项将是一个问题,对吧?我不认为它的表现会和你现在正在做的有什么不同,除了只写一次。无论他们点击的是哪条路径,如果该路径包括:lang,它都会通过与之匹配的.param运行。不过,我从未见过像您这样将param与
一起使用。这有什么特别的吗?或者只是把它当作字符串的一部分?将参数设置为可选,这样我就可以设置主语言,例如。。。req.params.lang=req.params.lang | | |“en”,所以如果用户没有键入参数,语言将是en,明白吗?是的,这很有意义。我的示例不会涵盖那个特定的情况,它需要自己的中间件来初始化.param然后在需要时覆盖的值。您现有的解决方案可能最适合您的情况