2016-10-07 8 views
-1

ノードに使用するライブラリに関係なく、すべて絶対パスが必要です。ノードのWeb要求を含むURLをホストに含める必要があるのはなぜですか?

これは、フェッチ・カレーを構築し、そのフェッチをファンクション・チェーンに渡して要求を出す必要があることを意味します。あるいは、本番または開発のいずれであるかを判断した上で定義される定数を作成する必要があります。環境が変わるたびにそのURLを更新してください。

ノードにURLのホスト名が必要なのはどうしてですか?

私のアプリのどこにでもサーバー側のリクエストを行うシームレスな方法がありますか?

コード例:

node index.js 
index.js 
let app = Express(); 
app.use('ace', (req, res) => foo()); 
app.use('somedata.json', (req, res) => res.status(200).send('{"hello": "world"}')); 

foo.js 
() => bar(); 

bar.js 
() => bat(); 

bat.js 
() => fetch('/somedata.json').then(console.log); 
+0

コメントなしで地獄downvotes誰ですか? –

+0

私はあなたが実際に持っている問題を理解していません。 HTTPリクエストをサーバサイドにするとき、リクエストを行うことができる "ベースHREF"というようなものは存在しないので、絶対URLの必要性はありません。 – robertklep

+0

したがって、express.listenは、他のライブラリがホストのURLを基準にして探すためのグローバルを設定しません。それは私の最初の質問に答えます。 私の2番目の質問に答えることはできません "私のアプリのどこにでもサーバーのサイドリクエストを行うよりシームレスな方法はありますか?" –

答えて

1

相対HTTPリクエストのようなものはありません。実際のHTTPリクエストは完全修飾URLでなければなりません。これがHTTP仕様です。 HTTPはステートレスであるため、特定のホストに関連付けられた「ベースパス」状態はありません。

相対リクエストはブラウザタイプの環境に存在しますが、ブラウザがリクエストを前処理しているだけであり、絶対でない場合、ブラウザはデフォルトのベースパスを追加して絶対パスを追加します。ブラウザからサーバーに送信されるすべてのリクエストは、実際には絶対URLです。

ブラウザと同じことをした独自の関数を書くことができます。その上に基本パスを設定してから、このファンクションを介してすべてのリクエストを送信し、要求に対して送信されたURLをチェックします。完全なパスでない場合は、ベースパスが追加されます。

解決しようとしている問題の実際のコード例を示した場合は、より具体的にお手伝いできます。開発環境や本番環境のいずれかであれば、通常は起動時にいくつかの変数を設定し、実行している環境の種類を指定せずに、要求を作成するたびにこれらの変数を使用するようにしてください。

+0

相対的に使用する単語が間違っていました。私はタイトルでそれを修正しましたが、体内で修正するのを忘れました。私はホスト名を指定する必要はありません。 コード例を追加しました。合理的には、Expressからのメソッドを使用して、それがリッスンしているホスト名を知っている必要があると思います。 私は定数を使うことができましたが、ユーザのエラーを許すいくつかのファイルにホストを正しく書き込む必要があります。それは私が信じるreqを通してアクセス可能ですが、私はそれを100万回の関数呼び出しに渡す必要はありません。 –

+1

@JasonMcCarrell - 今、httpリクエストをするときにホスト名が必要なのはなぜですか?真剣に?http要求を行う関数の周りに独自のラッパーを作成したい場合は、特定のホストをデフォルトとしますが、確かにそうすることができますが、node.js httpライブラリに組み込まれていません。そして、通常、あなた自身のコードに実際のHTTPリクエストを行う必要はありません。関数に必要な機能だけを公開し、直接関数呼び出しを行います。通常、HTTPを介して独自のコードを呼び出す必要はありません。 – jfriend00

+0

プロキシのURLを呼び出しますか?あなたは一つの理由を考えることができませんでしたか? –

関連する問題