假设我的示例URL是
http://example.com/one/two
我说我有以下路线
app.get('/one/two', function (req, res) {
var url = req.url;
}
url的值是/one/two。
如何在Express中获得完整的URL ? 例如,在上面的情况下,我想收到http://example.com/one/two。
假设我的示例URL是
http://example.com/one/two
我说我有以下路线
app.get('/one/two', function (req, res) {
var url = req.url;
}
url的值是/one/two。
如何在Express中获得完整的URL ? 例如,在上面的情况下,我想收到http://example.com/one/two。
当前回答
通常我依赖这2个,取决于服务器和代理是否存在:
req.socket.remoteAddress
req.headers.referer
其他回答
使用url.format:
var url = require('url');
这支持所有协议,包括端口号。如果你的originalUrl中没有查询字符串,你可以使用这个更干净的解决方案:
var requrl = url.format({
protocol: req.protocol,
host: req.get('host'),
pathname: req.originalUrl,
});
如果你有一个查询字符串:
var urlobj = url.parse(req.originalUrl);
urlobj.protocol = req.protocol;
urlobj.host = req.get('host');
var requrl = url.format(urlobj);
我的代码是这样的,
params['host_url'] = req.protocol + '://' + req.headers.host + req.url;
谢谢大家提供这些信息。这是非常烦人的。
把这个添加到你的代码中,你就再也不用考虑它了:
var app = express();
app.all("*", function (req, res, next) { // runs on ALL requests
req.fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl
next()
})
您还可以在那里执行或设置其他操作,例如将日志记录到控制台。
我建议使用originalUrl而不是URL:
var url = req.protocol + '://' + req.get('host') + req.originalUrl;
查看originalUrl的描述: http://expressjs.com/api.html#req.originalUrl
在我们的系统中,我们这样做,所以originalUrl对我们很重要:
foo = express();
express().use('/foo', foo);
foo.use(require('/foo/blah_controller'));
Blah_controller是这样的:
controller = express();
module.exports = controller;
controller.get('/bar/:barparam', function(req, res) { /* handler code */ });
我们的url有这样的格式
www.example.com/foo/bar/:barparam
因此,我们需要req。originalUrl在bar控制器的获取处理程序。
你需要使用req.headers.host + req.url来构造它。当然,如果你是在不同的端口,你得到的想法;-)