我使用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 ??


当前回答

//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 ??

这样做的原因是Express减去你的处理程序函数挂载的路径,在本例中是'/account'。

他们为什么要这样做?

因为这样可以更容易地重用处理程序函数。您可以为req创建一个处理程序函数来做不同的事情。Path === '/'和req. Path。Path === '/goodbye'例如:

function sendGreeting(req, res, next) {
  res.send(req.path == '/goodbye' ? 'Farewell!' : 'Hello there!')
}

然后你可以将它挂载到多个端点:

app.use('/world', sendGreeting)
app.use('/aliens', sendGreeting)

给:

/world           ==>  Hello there!
/world/goodbye   ==>  Farewell!
/aliens          ==>  Hello there!
/aliens/goodbye  ==>  Farewell!

其他回答

它应该是:

req.url

快递里

Req.route.path对我有用

var pool = require('../db');

module.exports.get_plants = function(req, res) {
    // to run a query we can acquire a client from the pool,
    // run a query on the client, and then return the client to the pool
    pool.connect(function(err, client, done) {
        if (err) {
            return console.error('error fetching client from pool', err);
        }
        client.query('SELECT * FROM plants', function(err, result) {
            //call `done()` to release the client back to the pool
            done();
            if (err) {
                return console.error('error running query', err);
            }
            console.log('A call to route: %s', req.route.path + '\nRequest type: ' + req.method.toLowerCase());
            res.json(result);
        });
    });
};

执行后,我看到以下在控制台和我得到完美的结果 在我的浏览器里。

Express server listening on port 3000 in development mode
A call to route: /plants
Request type: get

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

console.log (req.originalUrl)

//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 ??

这样做的原因是Express减去你的处理程序函数挂载的路径,在本例中是'/account'。

他们为什么要这样做?

因为这样可以更容易地重用处理程序函数。您可以为req创建一个处理程序函数来做不同的事情。Path === '/'和req. Path。Path === '/goodbye'例如:

function sendGreeting(req, res, next) {
  res.send(req.path == '/goodbye' ? 'Farewell!' : 'Hello there!')
}

然后你可以将它挂载到多个端点:

app.use('/world', sendGreeting)
app.use('/aliens', sendGreeting)

给:

/world           ==>  Hello there!
/world/goodbye   ==>  Farewell!
/aliens          ==>  Hello there!
/aliens/goodbye  ==>  Farewell!

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

req.path

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

/myurl.htm?allkinds&ofparameters=true

要求的事情。Path会给你:

/myurl.html