如何完成 url 在 Express?

假设我的样本 url Takov.

http://example.com/one/two
我说我有以下路线


app.get/'/one/two', function /req, res/ {
var url = req.url;
}


价值
url

将是平等的
/one/two

.

如何让我

满的 url

在 Express?
例如,在上面的情况下,我想得到
[url=http://example.com/one/two]http://example.com/one/two[/url]

.
已邀请:

龙天

赞同来自:

该协议可用作
req.protocol

.
http://expressjs.com/api.html#req.protocol
到 express 3.0 可以考虑协议
http

, 如果只有你看不到那个
req.get/'X-Forwarded-Protocol'/

安装和事项
https

, 在这种情况下,您知道这是您的协议


主人出来了
req.get/'host'/

, 由Gopal发布

我希望你不需要你的非标准 URLs, 但如果你需要它知道,他会在申请的状态下,因为这是你递给的
app.listen

在服务器启动期间。 但是,在非标准港口的本地开发的情况下 Chrome , 似乎包括主机标题中的端口,所以
req.get/'host'/

例如,返回
localhost:3000

. 因此,至少在标准端口上的生产站点的情况并直接查看快递应用程序。 /没有反向代理服务器/ 标题
host

, 显然,对港口做出正确的事情 URL.

路径来自
req.originalUrl

/谢 @pgrassant/. 注意这一点 DOES 包括查询字符串。
http://expressjs.com/api.html#req.originalUrl
. 取决于你将与之有关的 URL,
originalUrl

与之相比,也许是或不是正确的价值
req.url

.

将所有这些联合在一起以重建绝对 URL.


var fullUrl = req.protocol + '://' + req.get/'host'/ + req.originalUrl;

喜特乐

赞同来自:

你可以改用而不是将事情结合在一起
http://nodejs.org/api/url.html
和传输
URL.format//

信息是 express.

例子:


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;

龙天

赞同来自:

这是添加您可以调用对象的函数的好方法 req, 获得 url


app.use/function/req, res, next/ {
req.getUrl = function// {
return req.protocol + "://" + req.get/'host'/ + req.originalUrl;
}
return next//;
}/;


现在,如果您需要,您可以使用一个功能。

君笑尘

赞同来自:

使用
https://nodejs.org/api/url.htm ... rlobj
:


var url = require/'url'/;


这支持所有协议并包括端口号。 如果您没有在您的查询行 originalUrl, 您可以使用此清洁解决方案:


var requrl = url.format/{
protocol: req.protocol,
host: req.get/'host'/,
pathname: req.originalUrl,
}/;


如果您有Query String:


var urlobj = url.parse/req.originalUrl/;
urlobj.protocol = req.protocol;
urlobj.host = req.get/'host'/;
var requrl = url.format/urlobj/;

石油百科

赞同来自:

make req.host/req.hostname effective 必须有两个条件
http://expressjs.com/en/guide/behind-proxies.html
:


app.set/'trust proxy', 'loopback'/;

在 app.js

标题
X-Forwarded-Host

应该自己指定 webserver. eg. apache, 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 [url=http://myapp:8080;]http://myapp:8080;[/url]
}
}


apache

:


<virtualhost myhost:80="">
ServerName myhost
DocumentRoot /path/to/myapp/public
ProxyPass / [url=http://myapp:8080/]http://myapp:8080/[/url]
ProxyPassReverse / [url=http://myapp:8080/]http://myapp:8080/[/url]
</virtualhost>

小明明

赞同来自:

用它


var url = 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;

冰洋

赞同来自:

我会建议使用 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 */ }/;


所以我们 URLs 它具有以下格式:


www.example.com/foo/bar/:barparam


因此,我们需要 req.originalUrl 在控制器中 bar 得到一个处理程序。

詹大官人

赞同来自:

你需要用它来建立它
req.headers.host + req.url

. 当然,如果你在另一个端口托管托管等等,你就会得到这个想法 ;-/

奔跑吧少年

赞同来自:

我的代码看起来像那样


params['host_url'] = req.protocol + '://' + req.headers.host + req.url;

帅驴

赞同来自:

我使用包 node 'url' /npm install url/

你打电话的时候他做了什么


url.parse/req.url, true, true/


它会让你有机会获得全部或部分 url. 更多信息在这里:
https://github.com/defunctzombie/node-url
我用它如下,以获得以后的一切 / in
http://www.example.com/
, 用作变量并拧紧特定的档案 /有点 facebook:
http://www.facebook.com/username
/


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.get/'/one/two', function /req, res/ {
const url = getFullUrl/req/;
}

/**
* Gets the self full URL from the request
*
* @param {object} req Request
* @returns {string} URL
*/
const getFullUrl = /req/ => `${req.protocol}://${req.headers.host}${req.originalUrl}`;



req.protocol

给你 http 或者 https,
req.headers.host

例如,将为您提供完整的主机名 www.google.com,
req.originalUrl

灰尘 rest
pathName

/在你的情况下
/one/two

/

风见雨下

赞同来自:

只是下面的代码对我来说已经足够了!


const baseUrl = `${request.protocol}://${request.headers.host}`;
// [url=http://127.0.0.1:3333]http://127.0.0.1:3333[/url]

奔跑吧少年

赞同来自:

谢谢你们所有信息。 这非常令人讨厌。

将其添加到您的代码中,您永远不会再考虑它:


var app = express//;

app.all/"*", function /req, res, next/ { // runs on ALL requests
req.fullUrl = req.protocol + '://' + req.get/'host'/ + req.originalUrl
next//
}/


您可以执行或安装那里和其他东西,例如控制台的入口。

要回复问题请先登录注册