Javascript 在middleware-Node.JS中修改请求对象

Javascript 在middleware-Node.JS中修改请求对象,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,我的Node.JS应用程序中有一堆中间件,有没有办法删除/修改req.path并反映在下一个中间件中 如果我的问题含糊不清,请让我知道你是否需要更多的澄清 更新: 即使是req.path='foo'也不会在那一行之后更改我的req.path req.path = "foo"; console.log(req.path);// Here still it shows my original req.path not foo! 谢谢是的,只要将.path更改为您想要的任何内容即可。许多官方的中间件

我的Node.JS应用程序中有一堆中间件,有没有办法删除/修改
req.path
并反映在下一个中间件中

如果我的问题含糊不清,请让我知道你是否需要更多的澄清

更新:

即使是
req.path='foo'
也不会在那一行之后更改我的req.path

req.path = "foo";
console.log(req.path);// Here still it shows my original req.path not foo!

谢谢

是的,只要将
.path
更改为您想要的任何内容即可。许多官方的中间件和API(如挂载)正是这样做的。注意,如果你不知道自己在做什么,这很容易破坏很多东西

是的。只需删除或修改它。它是一个javascript对象

function requestDispatcher() {
  //default version was set to v1
  var defaultVersion = 'v1',
    re = /\/v\d/;
  return function(request, response, next) {
    var version = request.get('version');
    debug(request.url);
    // test if request.url has already contained version number
    if (!re.test(request.url)) {
      // if not define version number in http header then set default version
      // otherwise use the version number in the http header
      if (version === null || version === undefined) {
        request.url = ['/', defaultVersion, request.url].join('');
      } else {
        request.url = ['/', version, request.url].join('');
      }
    }
    debug(request.url);
    next();
  };
}
我使用这个技巧将请求分派到指定的版本,如果未指定,则路由到默认版本。这是我的工作

app.use(requestDispatcher());
app.use('/v1', require('./v1'));
app.use('/v2', require('./v2'));

但它似乎并没有反映在下一个中间件中!也许我做错了什么。我应该也使用管道还是仅仅更改它应该反映在下一个中间件中?也许req.path是一个计算属性?你试过改变req.url吗?看来我犯了一个愚蠢的错误,我只是用我正在做的事情更新了我的问题;在这个操作之后,即使它没有修改
req.path
,我是否做错了什么?这还不足以告诉你做错了什么。您应该删除所有代码,然后尝试设置
req.path='poop'
,看看这是否有效,然后从那里开始,即使req.path='foo'在该行之后也不会更改我的req.path!我还没有完全理解你的意思!你看到我最新的问题了吗?什么是调试(request.url)在您的代码中?它做什么呢?在express中,如果查看req.path的源代码defineGetter(req,'path',function path(){return parse(this).pathname;}),它是一个只读属性;函数defineGetter(obj,name,getter){Object.defineProperty(obj,name,{可配置:true,可枚举:true,get:getter});};也就是说,如果您想要更改路径,并反映下一个中间件,使用req.url而不是req.path,并且debug是记录东西的模块,它比console.log更好,那么在编写itchecko之后,您总是会忘记删除console.log。在我的示例中,使用req.url而不是req.path