2017-07-19 6 views
0

私の質問は、thisと非常によく似ています。Nodejsと表現静的ビュールーティング

私のように私のディレクトリ構造を持っている:

|-static 
|---css 
|---img 
|---js 
|-views 
|---login.ejs 
|---pure.html 
|---dash 
|-----dashboard.ejs 
|-----alsopure.html 

マイ設定:

app.set('views', __dirname + '/views'); 
app.use(express.static(__dirname + '/static')); 

私としてもルートを定義している:ビュー]フォルダで

app.get('/login', function(req,res){ 
    //some locals 
    res.render('login.ejs', locals); 
}); 

app.get('/dash', function(req,res){ 
    locals.date = new Date().toLocaleDateString(); 
    res.render('dash/dashboard.ejs', locals); 
}); 

、私は続けます私の純粋な静的なhtmlと私の動的なejsファイル。

ここで、viewsディレクトリから静的HTMLを提供するにはどうすればよいですか?静的な役割を果たすために/ viewsフォルダを追加すると、正しいURLにヒットした場合、ユーザーは自分のejsファイルも見ることができるようになるからです。

複数のhtmlファイルがあるので、私は新しいページごとに新しいルートを追加したくありません。

また、ビューエンジンに静的なHTMLを指定する方法はありますか?このページを「処理」する必要はありませんか?

ありがとうございます!

+0

なぜあなたの 'HTML'ファイルを静的フォルダに移動してそこからファイルを提供しないのですか? – CuriousMind

+0

また、 'public'フォルダを追加して静的にすることはできますか? –

+0

@CuriousMindなぜなら、アクセスと組織化を容易にするために、すべての関連コンテンツを1つのフォルダに保存したいからです。 –

答えて

0

だから、あなたはnodejsfsを使用することができ、その後、ルートは次のようになる:

app.get(/.*/, function(req, res, next) { 
    var path = __dirname + '/views/' + req.path + '.html'; 
    if(fs.existsSync(path)) { 
    // Consolidate function to load html with path 
    } 
    else { 
    next(); 
    } 
} 

それとも、ただのミドルウェアとしてそれを使用することができます。

app.use(function(req, res, next) { 
    var path = __dirname + '/views/' + req.path + '.html'; 
    if(fs.existsSync(path)) { 
    // Consolidate function to load html with path 
    } 
    else { 
    next(); 
    } 
} 

しかし、私は、それはあなたのための肥大化になるだろうと思いますプログラム:)。応答ごとに、htmlファイルを検索するからです。

+0

同様の行に(私は適切なミドルウェアを使用することをお勧めしますが)、要求されたパスに '.ejs'拡張があるかどうかを確認し、それを提供することを拒否できます。 – robertklep

+0

ええ、ありがとう。私はちょうど@robertklepのコメントを編集しました。 –

関連する問題