比方说,我的示例网址
http://example.com/one/two
我说我有以下航线
app.get('/one/two', function (req, res) {
var url = req.url;
}
值url
将是/one/two
。
我如何在快速的完整网址 ? 例如,在上述情况下,我想接收http://example.com/one/two
。
比方说,我的示例网址
http://example.com/one/two
我说我有以下航线
app.get('/one/two', function (req, res) {
var url = req.url;
}
值url
将是/one/two
。
我如何在快速的完整网址 ? 例如,在上述情况下,我想接收http://example.com/one/two
。
该协议可作为req.protocol
。 这里文档
http
,除非你看到req.get('X-Forwarded-Protocol')
设置并具有价值https
,在这种情况下,你知道那是你的协议 主机来自req.get('host')
作为戈帕尔曾表示
希望你不需要在URL中的非标准端口,但如果你确实需要知道你必须在你的应用程序的状态,因为它是不管你传递给app.listen
在服务器启动时。 然而,在非标准端口上本地发展的情况下,铬似乎包括在主机头部的端口,以便req.get('host')
返回localhost:3000
,例如。 因此,至少在生产现场的标准端口上,并直接浏览您的明确程序(不反向代理)的情况下, host
头似乎做关于URL中的端口是正确的。
该路径从何而来req.originalUrl
(感谢@pgrassant)。 注意这是否包括查询字符串。 这里文档上req.url和req.originalUrl 。 根据您打算与URL做什么, originalUrl
可能会或可能不会像比较正确的值req.url
。
结合这些一起重建的绝对URL。
var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
相反,在串联在一起的东西你自己的,你也可以使用Node.js的API的网址,并通过URL.format()
从明确的信息。
例:
var url = require('url');
function fullUrl(req) {
return url.format({
protocol: req.protocol,
host: req.get('host'),
pathname: req.originalUrl
});
}
我发现它有点PITA来获得请求的URL。 我不相信有没有明确的更简单的方法。 应该只是req.requested_url
但这里是我如何设置:
var port = req.app.settings.port || cfg.port;
res.locals.requested_url = req.protocol + '://' + req.host + ( port == 80 || port == 443 ? '' : ':'+port ) + req.path;
使用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);
这里是添加你可以在REQ对象调用来获取网址功能的好方法
app.use(function(req, res, next) {
req.getUrl = function() {
return req.protocol + "://" + req.get('host') + req.originalUrl;
}
return next();
});
现在你有,你可以,如果你需要它按需调用一个函数。
使req.host/req.hostname有效必须具备两个条件时, 代理背后快递 :
app.set('trust proxy', 'loopback');
在app.js X-Forwarded-Host
通过你的Web服务器自己的头必须指定。 例如。 阿帕奇,Nginx的 nginx的 :
server {
listen myhost:80;
server_name myhost;
location / {
root /path/to/myapp/public;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://myapp:8080;
}
}
阿帕奇 :
<VirtualHost myhost:80>
ServerName myhost
DocumentRoot /path/to/myapp/public
ProxyPass / http://myapp:8080/
ProxyPassReverse / http://myapp:8080/
</VirtualHost>
用这个,
var url = req.headers.host + '/' + req.url;
您需要使用来构建它req.headers.host + req.url
。 当然,如果你正在主持一个不同的端口,这样你的想法;-)
我会建议使用originalUrl而非网址:
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 */ });
因此,我们的网址的格式为:
www.example.com/foo/bar/:barparam
因此,我们需要req.originalUrl条状控制器获取处理程序。
我的代码看起来像这样,
params['host_url'] = req.protocol + '://' + req.headers.host + req.url;
var full_address = req.protocol + "://" + req.headers.host + req.originalUrl;
要么
var full_address = req.protocol + "://" + req.headers.host + req.baseUrl;
我使用节点包“网址”(NPM安装URL)
当你调用它所做的是
url.parse(req.url, true, true)
它会给你找回URL的全部或部分的可能性。 更多资讯: https://github.com/defunctzombie/node-url
我用它在以下方式获得任何来自后在/ http://www.example.com/作为一个变量使用,并拉起一个特定的个人资料(有点像Facebook的: HTTP://www.facebook。 COM /用户名 )
var url = require('url');
var urlParts = url.parse(req.url, true, true);
var pathname = urlParts.pathname;
var username = pathname.slice(1);
虽然这个工作,你有你的server.js文件中创建您的路线是这样的:
self.routes['/:username'] = require('./routes/users');
并设置路由文件是这样的:
router.get('/:username', function(req, res) {
//here comes the url parsing code
}
我却发现,通过使用此代码下面你可以得到你的网址。 然后进行切片起来,并决定下一步做什么。
app.use(function(req, res, next) {
console.log(req.originalUrl);
res.send(req.originalUrl);
});
谢谢大家对这个信息。 这是令人难以置信的烦人。
添加到您的代码,你就永远不会有再想想:
var app = express();
app.all("*", function (req, res, next) { // runs on ALL requests
req.fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl
next()
})
你可以做或设置其他的东西有作为,如日志安慰。