208

Express + node.js を使用していて、req オブジェクトがあります。ブラウザのリクエストは /account ですが、req.path をログに記録すると、「/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();
    }
  });

req.path は / である必要があるのに /account ??

4

9 に答える 9

297

自分で少し遊んだ後、次を使用する必要があります。

console.log(req.originalUrl)

于 2012-09-21T08:51:04.213 に答える
14

8年後の更新:

req.pathここで述べたこととまったく同じことをすでに行っていました。この回答がどのように問題を解決し、正しい回答として受け入れられたかは覚えていませんが、現在は有効な回答ではありません。この回答は無視してください。これについて言及してくれてありがとう@mhodges。

元の答え:

クエリ文字列なしで「パス」のみを取得したい場合は、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();
    }
});
于 2013-06-19T08:08:26.527 に答える
12

そのはず:

req.url

エクスプレス 3.1.x

于 2013-04-22T01:38:12.480 に答える
11

バージョン 4.x では、フル パスを取得するためreq.baseUrlに加えてを使用できるようになりました。req.pathたとえば、OP は次のようになります。

//auth required or redirect
app.use('/account', function(req, res, next) {
  console.log(req.baseUrl + req.path);  // => /account

  if(!req.session.user) {
    res.redirect('/login?ref=' + encodeURIComponent(req.baseUrl + req.path));  // => /login?ref=%2Faccount
  } else {
    next();
  }
});
于 2017-06-27T19:14:47.677 に答える