node.js + Express + ejs から始めたばかりです。要求された ejs ファイルをレイアウト ファイルに取り込む方法がどこにも見つかりません。
私はそれyield
がここで正しいことではないことをよく知っています。
例えば
レイアウト.ejs
<html>
<head><title>EJS Layout</title></head>
<body>
<%= yield %>
</body>
</html>
index.ejs
<p>Hi</p>
最後に、エクスプレス アプリのソース コードをいくつか見つけました。
<%- body %>
私はここであなたを助けることができると思います。私はあなたにいくつかの説明をします。
layout.ejs は、コードのスニペットから構築された HTML サイトに必要なレイアウトです :)。
私のlayout.ejsは次のようになります:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html">
<head>
<title><%- title %></title>
<link rel="stylesheet" type="text/css" href="stylesheets/style.css">
</head>
<body>
<!-- total container -->
<header>
<%- partial('topic.ejs') %>
<%- body %>
</header>
</body>
</html>
コードの説明をします。「ヘッダー」タグは、すべてのコンテンツを含むラッパー (800x600) です。「partial」コマンドを使用すると、ソースコードのスニペットをロードできます。私の例では、「topic.ejs」は、すべてのページにとどまる必要がある画像と色を使用したトピック デザインです (静的であると言えます)。
topic.ejs のソースコード: (これは実際には単なる html タグであり、div で始まり、:P で終わります)
<!-- frame of topic -->
<div id="topic">
...
</div> <!-- end of "topic" -->
これで、すべてのページに topic.ejs が実装されました (最初のソースコードをたどると、それがわかります):
"<%- partial('topic.ejs') %>".
これは、次のことを意味します。すべてのページにこの部分的なコードが実装されていますね! -良い。
しかし、" <%- body %> " コマンドはどうでしょうか? も分かりやすいです。app.js は <%- body %> が正確に何をするかを気にします。しかし、それがどのように機能するかは、後で説明します。
ご存じのとおり、HTML ページの最初のページの名前は「index.html」です。ここで、 index.html も取得して " index.ejs " にコンパイルする必要があります。「topic.ejs」と同様の手順で行います。ソースコードを次のような html タグに減らします。
<!-- frame of MetaContent -->
<div id="metacontent">
...
</div> <!-- end of "MetaContent" -->
ここから、私のapp.jsを見てください:
app.get('/xyz', function(req, res){
res.render('index.ejs', { title: 'My Site' });
});
説明: xyz はランダムな名前です。自分で選択してください。この名前が今あなたの URL です。わからない?以下の例を見てください。app.js を実行してサーバーを起動すると、サーバーは特定のポート (デフォルトは 3000 だと思います) で実行されます。index.html の通常の URL は "localhost:3000/index.html" です。ブラウザのアドレスバーに入力してください。あなたのサイトが表示されるはずです。これを試してください:
ローカルホスト:PORT/xyz
前に示した app.get-methode では、app.js を明示的に指定します。「/xyz」パスの後ろに「index.ejs」ファイルがあります。しかし、それは正確には何を意味するのでしょうか?
つまり、ブラウザのアドレス バーに「locallhost:PORT/xyz」と入力すると、primal index.html サイトのコンテンツが表示されますが、表示されるのは、生成された layout.ejs のコンテンツです
。背後にあるロジック: (layout.ejs をもう一度見てみると)
With the <%- body %> command you load into your layout just a snippet of sourcecode. Just do this: サイトを実行した後、右クリックして、ソースコードを表示させてください. これは通常の HTML ソースコードである必要があります. 実際には, あなたのコードのいくつかのスニペットを取った, あなたの layout.ejs のソースコードです.
オールインワン:
layout.ejs で <%- body %> コマンドを使用すると、コードのスニペットを読み込むことができます。<%- body %> = "index.ejs"、"contact.ejs" など。すべての .ejs ファイルについて、app.js をその "get" メソッドに拡張する必要があります (例は次のとおりです)。複数のサイトがある場合 (もちろん、サイトが 1 つだけではありません)、新しいサイトのコードのスニペットを .ejs ファイルに入れる必要があります (例: contact.html => contact.ejs)。app.js ファイルを次のように拡張する必要もあります。
app.get('/contact', function(req, res){
res.render('contact.ejs', { title: 'My Site' });
});
また
app.get('/xyz/contact', function(req, res){
res.render('contact.ejs', { title: 'My Site' });
});
そして、.ejs ファイルのリンクを変更することを忘れないでください: onclick="window.location.replace('contact.html')" は、app.get-methode で選択した名前になります。たとえば、onclick="window.location.replace('contact')" に変更します。
onclick="window.location.replace(' contact.html ' )" は onclick="window.location.replace(' contact ')"になります
ファイルではなく、URL 名にリンクするだけです。App.js がこれを処理します :)