1. ホーム
  2. node.js

[解決済み】Expressで完全なURLを取得する方法は?

2022-03-23 10:45:22

質問

例えば、私のサンプルURLが

http://example.com/one/two

で、私は以下のルートを持っていると言います。

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

の値は url は、次のようになります。 /one/two .

を取得するにはどうすればよいのでしょうか? フルURL をExpressで表示できますか? 例えば、上記の場合、次のように受け取りたいのです。 http://example.com/one/two .

解決方法は?

  1. プロトコルは req.protocol . ドキュメントはこちら

    1. express 3.0以前は、想定されるプロトコルは http が表示されない限り req.get('X-Forwarded-Protocol') が設定され、値 https この場合、それがあなたのプロトコルであることがわかります。
  2. ホストは req.get('host') Gopal が示したように

  3. URL に非標準のポートを使う必要がないことを祈りますが、もしそれを知る必要があるのなら、アプリケーションの状態にそれを持たせるでしょう。 app.listen サーバ起動時に しかし、非標準のポートでローカルに開発する場合、Chromeはホストヘッダにポートを含めるようです。 req.get('host') が返ってきます。 localhost:3000 といった具合に。したがって、少なくとも標準ポートの本番サイトで、expressアプリに直接ブラウズする場合(リバースプロキシなし)には、このように host ヘッダは、URLのポートに関して正しいことを行っているようです。

  4. パスの由来は req.originalUrl (@pgrassant さんありがとうございます)。これはクエリ文字列を含んでいることに注意してください。 req.urlとreq.originalUrlについては、こちらのドキュメントを参照してください。 . URLをどうするかは、あなたの意図次第です。 originalUrl と比較して、正しい値である場合もあれば、そうでない場合もあります。 req.url .

これらをすべて組み合わせて、絶対的なURLを再構築します。

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