2016-11-08 10 views
0

私は、JavaScriptとWebSocketアプリケーションへのHTMLを提供する静的なHTMLサーバー以上にExpressを使用したことはありません。私は今、私が働くことを試みているいくつかのサンプルコードと非常に混同しています。"views"パスとexpress.staticで使用されるパスの違いは何ですか?

私は最新Expressのバージョンの例を更新した後、初期化コードは次のようになります。

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、画像、スクリプト、およびその他のファイルがホストされている場所です。しかし、他のパスは、私はこれらの2行を理解していない、私を悩ます:

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は提供されたテンプレート名の文字列を検索してテンプレートを検索し、それを解析して出力します。あなたは、静的なディレクトリで何かにアクセスしたい場合は、直接そのルートを使用することができます

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

:あなたがルートを作成することができます

html 
    body 
    h1= message 

:のようなものが含まれてい

あなたは/views/index.pugを持っている場合同じように。

More information about express template engine usage is here

+0

回答ありがとうございます。私はそれを取得し始めていると思います。しかし何らかの理由で 'localhost:3000'に' public/index.html'を静的に使用していますが、他のすべてのリクエストはあなたが言うように 'pug'ファイルを使用しているようです。 'app.get( '/''のための私のコードはあなたと同じです、 'res.render'と1行だけです...それは私には大変なバグはありませんが、私はそれを全く理解していません... –

+0

明快にするために私の完全なコードはありますが、私が思った通りです:https://gist.github.com/Darker/c016ff3d43100e2aa43addc2416381e4 50行目以下のコードは初期化の後にすでにあります。 –

+1

ミドルウェアは書かれた順序で使用されています。 '.static 'が' .get('/''の前に使われているので、' public/index.html'は他のビューがレンダリングされる前に最初に提供されます –

関連する問題