2016-11-08 75 views
0

我從來沒有使用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 "

我在這裏不是隻是爲了雖然修復錯誤。我更感興趣知道我的代碼是什麼意思。任何人都可以向我解釋,我在做什麼?

回答

1

views不是靜態的。當您使用response.render方法時,express將查找提供的模板名稱字符串以查找它然後解析併發出的模板。

如果你有/views/index.pug包含類似:

html 
    body 
    h1= message 

您可以創建一個路由:

app.get('/' (req, res) => { 
    res.render('index', {message: "hello"}); 
}); 

如果你想在你的靜態目錄訪問的東西,你可以直接使用這條路線以及。

More information about express template engine usage is here

+0

感謝您的回答,我想我已經開始明白了。但出於某種原因,轉到'localhost:3000'靜態地使用'public/index.html',但所有其他請求似乎都像你說的那樣使用'pug'文件。我的'app.get('/''的代碼和你的代碼一樣,只有一行'res.render' ...它不會讓我感到非常煩惱,但我完全不理解它... –

+0

下面是我的完整代碼清晰,但我認爲它就像你預期的那樣:https://gist.github.com/Darker/c016ff3d43100e2aa43addc2416381e4代碼行50已經在初始化後。 –

+1

中間件被用於寫入的順序,所以由於'.static'在'.g​​et('/''之前使用,因此在呈現另一個視圖之前首先提供public/index.html' –

相關問題