我使用express + node.js,我有一个req对象,浏览器中的请求是/帐户,但当我日志req. js。我得到'/' -而不是'/account'。

  //auth required or redirect
  app.use('/account', function(req, res, next) {
    console.log(req.path);
    if ( !req.session.user ) {
      res.redirect('/login?ref='+req.path);
    } else {
      next();
    }
  });

要求的事情。路径是/当它应该是/account ??


当前回答

8年后更新:

要求的事情。path已经做了和我这里提到的完全一样的事情。我不记得这个答案是如何解决问题并被接受为正确答案的,但目前它不是一个有效的答案。请忽略这个回答。谢谢@mhodges提到这一点。

最初的回答:

如果你真的想只得到“路径”而没有querystring,你可以使用url库来解析并只得到url的路径部分。

var url = require('url');

//auth required or redirect
app.use('/account', function(req, res, next) {
    var path = url.parse(req.url).pathname;
    if ( !req.session.user ) {
      res.redirect('/login?ref='+path);
    } else {
      next();
    }
});

其他回答

在我自己玩了一会之后,你应该使用:

console.log (req.originalUrl)

它应该是:

req.url

快递里

对于那些从request .route.path中获得未定义的,这是正确的。

在路由处理器内部,有一个路由。 在中间件处理程序内部,没有路由。

在某些情况下,你应该使用:

req.path

这将为您提供路径,而不是完整的请求URL。例如,如果你只对用户请求的页面感兴趣,而不关心url的所有参数:

/myurl.htm?allkinds&ofparameters=true

要求的事情。Path会给你:

/myurl.html

8年后更新:

要求的事情。path已经做了和我这里提到的完全一样的事情。我不记得这个答案是如何解决问题并被接受为正确答案的,但目前它不是一个有效的答案。请忽略这个回答。谢谢@mhodges提到这一点。

最初的回答:

如果你真的想只得到“路径”而没有querystring,你可以使用url库来解析并只得到url的路径部分。

var url = require('url');

//auth required or redirect
app.use('/account', function(req, res, next) {
    var path = url.parse(req.url).pathname;
    if ( !req.session.user ) {
      res.redirect('/login?ref='+path);
    } else {
      next();
    }
});