我從來沒有使用Express來提供超過靜態HTML服務器提供JavaScript和HTML到WebSocket應用程序。我現在非常困惑於一些我正在努力工作的示例代碼。「views」路徑和express.static中使用的路徑之間有什麼區別?
我更新的最新版本的快車之後的例子,初始化代碼如下所示:
var methodOverride = require('method-override');
var bodyParser = require('body-parser');
var errorHandler = require('errorhandler');
// One path...
app.set('views', __dirname + '/views');
app.set('view engine', 'pug');
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(methodOverride());
var path = require ('path');
// Another path
app.use(express.static(path.join(__dirname, '/public')));
我熟悉的express.static
。這是靜態HTML,圖像,腳本和其他文件託管的路徑。但是其他的路徑困擾我,我不明白這兩條線:
app.set('views', __dirname + '/views');
app.set('view engine', 'pug'); // Maybe some HTML template parser???
的問題是,這實際上導致錯誤:
Error: Failed to lookup view "index" in views directory "
... project path .../views
"
我在這裏不是隻是爲了雖然修復錯誤。我更感興趣知道我的代碼是什麼意思。任何人都可以向我解釋,我在做什麼?
感謝您的回答,我想我已經開始明白了。但出於某種原因,轉到'localhost:3000'靜態地使用'public/index.html',但所有其他請求似乎都像你說的那樣使用'pug'文件。我的'app.get('/''的代碼和你的代碼一樣,只有一行'res.render' ...它不會讓我感到非常煩惱,但我完全不理解它... –
下面是我的完整代碼清晰,但我認爲它就像你預期的那樣:https://gist.github.com/Darker/c016ff3d43100e2aa43addc2416381e4代碼行50已經在初始化後。 –
中間件被用於寫入的順序,所以由於'.static'在'.get('/''之前使用,因此在呈現另一個視圖之前首先提供public/index.html' –