Express에서 전체 URL을 얻는 방법?
내 샘플 URL이
그리고 나는 다음과 같은 경로가 있다고 말합니다.
app.get('/one/two', function (req, res) {
var url = req.url;
}
의 값은 url
입니다 /one/two
.
Express 에서 전체 URL 을 얻으려면 어떻게해야 합니까? 예를 들어 위의 경우을 받고 싶습니다 http://example.com/one/two
.
프로토콜은로 제공됩니다
req.protocol
. 여기에 문서- express 3.0 이전에는 프로토콜 이 설정되어 있고 값 이없는 경우 가
http
아니라고 가정 할 수 있습니다 .이 경우 프로토콜임을 알고 있습니다req.get('X-Forwarded-Protocol')
https
- express 3.0 이전에는 프로토콜 이 설정되어 있고 값 이없는 경우 가
req.get('host')
Gopal이 지시 한대로 주최자URL에 비표준 포트가 필요하지는 않지만
app.listen
서버 시작시 전달한 것이기 때문에 포트를 알아야 할 경우 응용 프로그램 상태에있게 됩니다. 그러나 비표준 포트 지역 개발의 경우, 크롬 때문에 호스트 헤더의 포트를 포함하는 것 같다req.get('host')
수익을localhost:3000
예를 들어. 따라서 적어도 표준 포트의 프로덕션 사이트의 경우 Express 프록시를 사용하지 않고 Express 앱을 직접 탐색하는 경우host
헤더는 URL의 포트와 관련하여 올바른 일을하는 것으로 보입니다.경로는
req.originalUrl
(@pgrassant 덕분에) 나온 것입니다. 이 DOES에는 쿼리 문자열이 포함되어 있습니다. req.url 및 req.originalUrl에 대한 문서는 여기입니다 . URL로 수행하려는 작업에 따라에originalUrl
비해 올바른 값일 수도 있고 아닐 수도 있습니다req.url
.
이들을 모두 결합하여 절대 URL을 재구성하십시오.
var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
사물을 직접 연결하는 대신 URL에 node.js API를 사용 하고URL.format()
express의 정보를 전달할 수 있습니다.
예:
var url = require('url');
function fullUrl(req) {
return url.format({
protocol: req.protocol,
host: req.get('host'),
pathname: req.originalUrl
});
}
요청한 URL을 얻는 것이 약간의 PITA라는 것을 알았습니다. 나는 표현이 더 쉬운 방법이 없다고 믿을 수 없다. 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);
다음은 URL을 얻기 위해 req 객체를 호출 할 수있는 함수를 추가하는 좋은 방법입니다
app.use(function(req, res, next) {
req.getUrl = function() {
return req.protocol + "://" + req.get('host') + req.originalUrl;
}
return next();
});
이제 필요할 때 필요할 때 호출 할 수있는 기능이 있습니다.
프록시 뒤에 Express가 있을 때 req.host/req.hostname을 유효하게하려면 두 가지 조건이 있어야합니다 .
app.set('trust proxy', 'loopback');
app.js에서X-Forwarded-Host
웹 서버에서 사용자가 헤더를 지정해야합니다. 예. 아파치, 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
. 물론 다른 포트에서 호스팅하고 있다면 아이디어를 얻습니다. ;-)
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 */ });
따라서 URL의 형식은 다음과 같습니다.
www.example.com/foo/bar/:barparam
따라서 bar 컨트롤러 get 처리기에 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;
노드 패키지 'url'(npm install url)을 사용합니다.
전화를 걸 때하는 일은
url.parse(req.url, true, true)
URL의 일부 또는 전부를 검색 할 수 있습니다. 자세한 정보는 여기 : https://github.com/defunctzombie/node-url
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
}
실제로 아래 코드를 사용하면 URL을 얻을 수 있음을 발견했습니다. 그런 다음 그것을 슬라이스하고 다음을 결정하십시오.
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()
})
콘솔에 로그와 같은 다른 작업도 수행하거나 설정할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/10183291/how-to-get-the-full-url-in-express
'Programming' 카테고리의 다른 글
MongoDB 데이터베이스에서 모든 것을 삭제하십시오 (0) | 2020.02.18 |
---|---|
JSON.stringify와 JSON.parse의 차이점 (0) | 2020.02.18 |
Matplotlib에서, 인수가 fig.add_subplot (111)의 의미는 무엇입니까? (0) | 2020.02.18 |
Ubuntu에 Boost를 설치하는 방법 (0) | 2020.02.18 |
C 프로그래밍 언어 표준에 따라 구조체를 초기화하는 방법 (0) | 2020.02.18 |