7

.ejsネストされた形式で複数のファイルをレンダリングするにはどうすればよいですか?

だから私は次のファイルを持っています:

var mysql = require('mysql');
var ejs = require('ejs');
exports.index = function(req, res){
    if (req.method=='POST'){
        var connection = mysql.createConnection({user:'root', password:'root', database:'testdb'});
        var name = req.param('name');
        connection.query('select * from table_name where name = ?', name, function(err, rows, fields){
            if(err) throw err;
            res.render('index', {
                 title: 'title', content: res.render('index2', {data:rows})
            });
        });
    }
});

index.ejs非常に基本的な html タグ (html、head、body、および 1 つのpタグなど) で構成され、そこにコンテンツが別の.ejs<%- content %>ファイルによってレンダリングされると想定され、html、head、または body タグを含まず、は、コンテンツとタイトルのみがレンダリングされると想定されています。しかし、このファイルに POST リクエストでアクセスしてファイルをレンダリングし、出力された HTML ファイルをブラウザからチェックアウトすると、内容はindex2.ejsファイルのみで、html、body、head タグがありません。

それで、私は何が欠けていますか?で Javascript ライブラリを含めたい場合は<script src='some_file.js'></script>、ファイルでレンダリングしようとするときに別のレンダリング プロパティを追加する必要がありindex2.ejsます...そうですか?

4

2 に答える 2

14

まず、操作方法について混乱していると思いますres.renderドキュメントによると:

res.render(ビュー、[ローカル]、コールバック)

レンダリングされた文字列で応答するコールバックでビューをレンダリングします。

これは、HTML ページに index2.ejs のコンテンツしか表示されない理由を説明しています。


現在、ビュー内にビューをネストするという目標を達成する方法は複数あります。Express 3.x 以降では、 を使用する必要がありますinclude。この場合、次のようにビューを書き換えることができ
ます。 2- footer.ejs を定義します。この他ののようになります。 3- index2.ejs に、次の 2 つのファイルを含めます。

<% include header %>
    //The HTML of your index2.ejs
    //You can add some reusable views, like, say, a submit button above the footer
    <% include reusable_views/submit %>
<% include footer %>

2 つ目の方法は、ejs-localsを使用することです。これにより、パスを指定するだけで任意のビューを挿入できます。

res.render('index', {
                 title: 'title', 
                 content: 'index2', 
                 data:rows
            });

また、index1.ejs には次のものが含まれます。

<html><head>
<title><%= title %></title></head>
<body><p>
<%- partial('index2',{}) %>
</p></body></html>

このメソッドの利点は、extra オブジェクトを使用してビューに追加の値を渡すことができることです。詳細については、ejs-locals github ページをご覧ください。

于 2013-06-10T08:06:27.360 に答える
3

更新: レイアウト用の ejs-mate Express 4.x ローカル、部分的。

https://www.npmjs.com/package/ejs-mate

参照https://scotch.io/tutorials/use-ejs-to-template-your-node-application

于 2015-04-28T11:18:32.130 に答える