2017-12-30 34 views
0

以下のコードはどちらも、サーバ起動時にindex.html at localhost:3000 /に提供されます。なぜ誰かがapp.getexpress.staticを選ぶだろうapp.getexpress.staticミドルウェアの使用

const path = require('path'); 
const express = require('express'); 
const PORT = process.env.port || 3000; 
const publicPath = path.join(__dirname, '../public'); 

var app = express(); 

app.get('/',(req,res) => { 
    res.sendFile(publicPath + '/index.html'); 
}) 

app.listen(PORT,() => { 
    console.log(`Server is running on port ${PORT}`); 
}) 

express.static

const path = require('path'); 
const express = require('express'); 
const PORT = process.env.port || 3000; 
const publicPath = path.join(__dirname, '../public'); 

var app = express(); 
app.use(express.static(publicPath)); 
app.listen(PORT,() => { 
    console.log(`Server is running on port ${PORT}`); 
}) 

利用

使用すると、静的なHTMLファイルを提供します。 staticミドルウェアの使用について

答えて

0

express.static willを使用しないコードは、index.htmlに他の静的ファイル(cssとして)が含まれていても、index.html以外の静的ページを処理すると失敗します。それは失敗するでしょう。

+0

なぜ失敗するのですか?何か特別な理由? –

+0

あなたがsendFile行を使って何をしているのか、クライアントは '/home.html'などのクライアントが要求した場合、クライアントが/ '方向を要求すると、Expressはあなたの/index.htmlを提供しています。 ExpressJS(実際にはNode.JS)はどこにあるのかわからないので、どこでそれを見つけるのかわかりません。 'app.use(express.static(publicPath)) 'を使うと、あなたはpublicPathでクライアントから要求された静的ファイルを見つけるべきだとExpressに伝えています。あなたの/index.html/にcssが含まれていれば、それも提供されなければならず、あなたはExpressにどこにそれを見つけるべきかを決して伝えませんでした(あなたはexpress.static行でそれを行います)。 – Jibril

関連する問題