我使用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 ??
下面是一个从文档中扩展的例子,它很好地包装了所有你需要知道的关于在所有情况下使用express访问路径/ url的信息:
app.use('/admin', function (req, res, next) { // GET 'http://www.example.com/admin/new?a=b'
console.dir(req.originalUrl) // '/admin/new?a=b' (WARNING: beware query string)
console.dir(req.baseUrl) // '/admin'
console.dir(req.path) // '/new'
console.dir(req.baseUrl + req.path) // '/admin/new' (full path without query string)
next()
})
基于:https://expressjs.com/en/api.html#req.originalUrl
结论:如c1moore’s answer所述,使用:
var fullPath = req.baseUrl + req.path;
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();
}
});
下面是一个从文档中扩展的例子,它很好地包装了所有你需要知道的关于在所有情况下使用express访问路径/ url的信息:
app.use('/admin', function (req, res, next) { // GET 'http://www.example.com/admin/new?a=b'
console.dir(req.originalUrl) // '/admin/new?a=b' (WARNING: beware query string)
console.dir(req.baseUrl) // '/admin'
console.dir(req.path) // '/new'
console.dir(req.baseUrl + req.path) // '/admin/new' (full path without query string)
next()
})
基于:https://expressjs.com/en/api.html#req.originalUrl
结论:如c1moore’s answer所述,使用:
var fullPath = req.baseUrl + req.path;
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