16

クライアントがリクエストしたURLをリクエストから取得したい。

現在私は使用しています:

var requestedUrl = req.protocol + '://' + req.host + ':3000' + req.url;

これは本当にいいことではありません。また、必要な URL フラグメント (#/something) も除外されます。

完全な URL を取得する方法はありますか? もしかしてヘッダー外?

よろしく

4

4 に答える 4

22

サーバー上で URL のフラグメント (ハッシュ セクション) を取得することはできません。ブラウザーによって送信されることはありません。

フラグメント識別子の機能は、URI の残りの部分とは異なります。つまり、その処理は、サーバーからの参加なしに、もっぱらクライアント側で行われます。もちろん、サーバーは通常、MIME タイプを決定するのに役立ち、MIME タイプはフラグメントの処理を決定します。エージェント (Web ブラウザーなど) が Web サーバーからリソースを要求すると、エージェントはサーバーに URI を送信しますが、フラグメントは送信しません。代わりに、エージェントはサーバーがリソースを送信するのを待ってから、ドキュメント タイプとフラグメント値に従ってリソースを処理します。

ウィキペディアのフラグメント識別子から

完全な URL を (フラグメント識別子なしで) 取得したい場合は、req.host ではなくポートを含む "Host" ヘッダーを使用するのが最善の方法ですが、それ以外は現在行っているのと同じです。

var requestedUrl = req.protocol + '://' + req.get('Host') + req.url;
于 2012-08-18T11:32:52.660 に答える
1

私はあなたができることのほとんどすべてを恐れています。httpsを使用しない限り、プロトコルをhttpと見なすことができます。Raoulが言ったように、サーバー側の#以降は何も取得できません。これはブラウザ用です。

   var requestedUrl =  'http://' + req.headers.host + ':3000'  + req.url
于 2012-08-18T10:38:42.027 に答える
0

これはあなたが探しているものですか?

req._parsedUrl.pathname

まだ使用していない場合は、次のことを行う必要があります。

var util = require('util'); // core module
console.log(util.inspect(req));

デバッグするには、そのようなデータを見つけます。

于 2012-08-18T08:28:15.500 に答える