を、あなただけのページに複数の画像を送信しません。代わりに、ブラウザはページのHTMLを要求し、解析し、HTMLの<img>
タグを見つけて、それぞれの画像を別々に要求し、Webサーバーは要求された画像を送信してそれぞれの個別の画像要求に応答します。
すべての画像を共通のフォルダに入れた場合は、express.static()
を使用して、1行のコードですべての画像要求を処理できます。たとえば、次のようなコードの行:
app.use("/image", express.static(path.join(__dirname, "public")));
は、このようなURLのためのすべての画像の要求にサービスを提供します:
/image/a.png
/image/b.png
__dirname
以下「公共」のサブディレクトリ内の一致a.png
とb.png
を見つけることによって、 (これはスクリプトのディレクトリです)。 express.static()
hereについて詳しく読むことができます。明らかに、使用したいURLのパスとイメージが見つかるパスで再生できます。 2つは一緒に働かなければならないので、express.static()
はあなたが置いたサーバーのハードドライブの対応する場所に正しいイメージを見つけることができます。
app.use()
とexpress.static()
の別々のパスコンポーネントがどのように連携して動作するかを理解するには、しばしば混乱があります。上記の例では、"/image"
はリクエストURLの一部になります。このapp.use("/image", ...)
は、この特定のミドルウェアを/image
で始まるリクエストパスに適用するように指定しています。
その後path.join(__dirname, "public")
は/image
後にURLパスの残りの部分を取るとサブフォルダのディレクトリ__dirname
以下public
で、そのために見てexpress.static()
を語っています。ブラウザが/image/a.png
を、要求したのであれば、app.use()
文は/image
ために一致していることをURLをトリガし、その後express.static()
は、あなたが見て、それを告げたディレクトリにパスa.png
の残りの部分を見つけようとします。
をサーバー上のハードディスク、これは次のようになります。
/myproject/
app.js
login.html
/public
a.png
b.png
それはあなたがコードしている方法ですので、私は唯一のapp.jsと同じディレクトリにlogin.htmlとを示してきた現在書かれているように見えます。私は個人的に私のサーバスクリプトと同じディレクトリにパブリックファイルを置かないのは間違いを起こさず、誤って私のサーバファイルを公開しておきたいからです。
私は、より典型的には、このようにそれを行うだろう:
/myproject/
app.js
/public
login.html
a.png
b.png
app.use("/image", express.static(path.join(__dirname, "public")));
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, "public", "login.html"));
});
それとも、ただexpress.static()
があまりにもlogin.htmlとファイルを提供しましょう。
ページに?私は不可能だと言うでしょう、なぜならリソースはブラウザによって一つずつ要求されるからです。あなたが本当にしたいのであれば 'data-urls'を使うことができますが、これはお勧めできません。 – Psi
不可能ではありません – Caitiff
それでは、ブラウザが理解できるように(データURLを使用せずに)リソースを表示します。それは不可能です、あなたはHTTP仕様を読むべきです – Psi