programing

Express에서 전체 URL을 가져오는 방법은 무엇입니까?

oldcodes 2023. 5. 14. 11:03
반응형

Express에서 전체 URL을 가져오는 방법은 무엇입니까?

예를 들어, 제 샘플 URL은

http://example.com/one/two

그리고 나는 다음과 같은 경로가 있다고 말합니다.

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

url▁▁be 될 것입니다./one/two.

Express에서 전체 URL을 가져오려면 어떻게 해야 합니까?예를 들어, 위의 경우, 저는 다음과 같이 받고 싶습니다.http://example.com/one/two.

  1. 프로토콜은 다음과 같이 사용할 수 있습니다.req.protocol여기 문서

    1. 3에는 express 3.0으로 할 수 입니다.http이 그를 한req.get('X-Forwarded-Protocol')은 설되어있값가집니다을고정▁value다▁the가니▁is집값입니다.https당신의 이라는 것을 .
  2. 의 출처는 출처스호입니다.req.get('host') 한 바야흐로

  3. , 된 포트와에 해당 app.listen서버 시작 시간에 표시됩니다., 로 개발하는 에 해당 하만, 비포서로, 은표호경우, 트스헤더것, 로에트포는보,req.get('host')아온다를 합니다.localhost:3000를 들면 를들면예면. 적어도 앱을 프록시 ), 따라서적표역포있트사프경는익로션우는이서앱에하탐없이색직시을접프록스레스트향어방프덕준도에역▁so▁(경▁the▁on),▁reverse우(없),▁and따라▁app이시▁a▁at▁proxy▁of프without),host헤더는 URL의 포트와 관련하여 올바른 작업을 수행하는 것 같습니다.

  4. 그 길은 에서 옵니다.req.originalUrl(감사합니다 @pgrassant).여기에는 req.urlreq.originalUrl의 query string.docs가 포함됩니다.URL로 수행하려는 작업에 따라,originalUrl 비 정 확 수 있 아 수 있 습 니 도 다 닐 고 해 도 값 한일 ▁as ▁may ▁or ▁value ▁not ▁to ▁correct 니 다 ▁compared ▁be 습 있 ▁may ▁the 에 수 비도 아req.url.

이 모든 것을 함께 결합하여 절대 URL을 재구성합니다.

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

직접 연결하는 대신 URL 및 패스에 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
  });
}

요청한 url을 받는 것이 약간 PITA라는 것을 알았습니다.더 쉬운 속달 방법이 없다니 믿을 수가 없습니다.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;

2021년에

으로 작동하지만 하지 않는 이유는 " " " 때문입니다.url.parse은 금은입니다.legacy그래서 저는 당신이 사용하는 것을 제안합니다.new URL()이 더은많기제경우능하는원를에 대해 더 url.

고속도로

얻을 수 있습니다.Full URL아래 코드로부터.

`${req.protocol}://${req.get('host')}${req.originalUrl}`

URL 예: http://localhost: http/a/b/c?d=true&e=true#f=false

고정 속성(모든 경로에서 동일한 결과를 얻을 수 있음)

req.protocol: http
req.hostname: localhost
req.get('Host'): localhost:5000
req.originalUrl: /a/b/c?d=true&e=true
req.query: { d: 'true', e: 'true' }

고정 속성 아님(고속 자체로 제어되었기 때문에 모든 경로에서 변경됨)

경로:/

req.baseUrl: <blank>
req.url: /a/b/c?d=true&e=true
req.path: /a/b/c

/a

req.baseUrl: /a
req.url: /b/c?d=true&e=true
req.path: /b/c

설명서: http://expressjs.com/en/api.html#req.baseUrl

URL 패키지 방법

URL함수, 속성이 항상 고정되도록 모든 경로에서 동일한 결과를 얻을 수 있습니다.

특성.

여기에 이미지 설명 입력

const url = new URL(`${req.protocol}://${req.get('host')}${req.originalUrl}`);
console.log(url)

당신은 아래와 같은 결과를 얻을 것입니다.이미지 흐름과 일치할 수 있도록 이미지에 따라 속성을 변경했습니다.

URL {
  href: 'http://localhost:5000/a/b/c?d=true&e=true',
  protocol: 'http:',
  username: '',
  password: '',
  hostname: 'localhost',
  port: '5000',
  host: 'localhost:5000',
  origin: 'http://localhost:5000',
  pathname: '/a/b/c',
  search: '?d=true&e=true',
  searchParams: URLSearchParams { 'd' => 'true', 'e' => 'true' },
  hash: ''
}

참고:Hash가 다과같처때기서문버보없수습낼다니로 할 수 없습니다.Fragment서버에서 사용할 수 있지만 클라이언트 측 브라우저에서 사용할 수 있습니다.

설명서: https://nodejs.org/api/url.html#url_new_url_input_base

여기에 URL을 얻기 위해 req 개체에 호출할 수 있는 기능을 추가하는 좋은 방법이 있습니다.

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

이제 필요할 때 온디맨드로 호출할 수 있는 기능이 있습니다.

url.format 사용:

var url = require('url');

이것은 모든 프로토콜을 지원하며 포트 번호를 포함합니다.원래 Url에 쿼리 문자열이 없는 경우 다음과 같은 클리너 솔루션을 사용할 수 있습니다.

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);

make req.host/req.hostname effective는 프록시 뒤에서 Express를 실행할 때 다음 두 가지 조건을 가져야 합니다.

  1. app.set('trust proxy', 'loopback');jsapp.js로에서
  2. X-Forwarded-Host사용자가 웹 서버에서 헤더를 지정해야 합니다.예: 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 http://myapp:8080;
    }
}

apache:

<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;

아래 코드만 있으면 충분해요!

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

당신은 express의 req에서 전체 url을 얻을 수 있습니다.

function fetchPages(req, res, next) {

    let fullUrl = req.headers.host + req.originalUrl;
    console.log("full url ==> ",fullUrl);
}

다음을 사용하여 구성해야 합니다.req.headers.host + req.url물론 당신이 다른 포트에서 호스팅하고 있고 그런 식이라면 아이디어를 얻을 수 있습니다 ;-)

URL 대신 원래 URL을 사용할 것을 제안합니다.

var url = req.protocol + '://' + req.get('host') + req.originalUrl;

http://expressjs.com/api.html#req.originalUrl 에서 originalUrl에 대한 설명을 참조하십시오.

우리 시스템에서는 다음과 같은 작업을 수행하므로 원본 Url은 우리에게 중요합니다.

  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

따라서 바 컨트롤러 get 핸들러에 req.originalUrl이 필요합니다.

var full_address = req.protocol + "://" + req.headers.host + req.originalUrl;

또는

var full_address = req.protocol + "://" + req.headers.host + req.baseUrl;

할합수있다니습결다를 조합할 수 .req.protocol,req.hostname,그리고.req.originalUrl.메모req.hostnamereq.host또는req.get("host")효과는 있지만 읽기가 더 어려운 것.

const completeUrl = `${req.protocol}://${req.hostname}${req.originalUrl}`;

노드 패키지 'url'(npm install url)을 사용합니다.

당신이 전화할 때 하는 일입니다.

url.parse(req.url, true, true)

URL의 전체 또는 일부를 검색할 수 있는 가능성을 제공합니다.자세한 내용은 https://github.com/defunctzombie/node-url 에서 확인할 수 있습니다.

저는 http://www.example.com/ 의 / 뒤에 오는 모든 것을 변수로 사용하고 특정 프로필을 끌어오기 위해 다음과 같은 방법으로 그것을 사용했습니다(페이스북: 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
}

내 코드는 이렇게 생겼지만,

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

이 기능은 다음과 같은 경로에서 사용할 수 있습니다.

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.protocolhttp나 https를 줄 겁니다req.headers.hostwww.google.com 과 같은 전체 호스트 이름을 제공합니다.req.originalUrl나머지는 줄 것입니다pathName의 경우 (당신의경우)경)/one/two)

이 정보에 대해 모두 감사드립니다.이건 정말 짜증나는 일입니다.

이것을 코드에 추가하면 다시는 생각할 필요가 없습니다.

var app = express();

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

콘솔에 로그를 기록하는 등 다른 작업도 수행하거나 설정할 수 있습니다.

async function (request, response, next) {
  const url = request.rawHeaders[9] + request.originalUrl;
  //or
  const url = request.headers.host + request.originalUrl;
}

일반적으로 이 2개를 사용하고 서버에 따라 프록시가 존재합니다.

req.socket.remoteAddress

req.headers.referer

요청을 위해 모든 데이터를 기록하려고 했습니다.

그리고 나서 저는 rawHeaders를 로깅하고 URL에서 사용할 수 있는 모든 데이터를 찾았습니다.

그리고 저는 이것을 시도했습니다.

app.post("/news-letter", (req,res) => {
    console.log(req.body);
    res.redirect(req.rawHeaders[33]);
})
const fullUrl = `${protocol}://${host}:${port}${url}`
      
    const responseString = `Full URL is: ${fullUrl}`;                       
    res.send(responseString);  
})

언급URL : https://stackoverflow.com/questions/10183291/how-to-get-the-full-url-in-express

반응형