Как сделать несколько.файлы ejs во вложенной форме в узле.js и Экспресс?

как я могу сделать несколько .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 и one p tag) и есть <%- content %> в нем, где предполагается, что контент передается другим .файл ejs, который не включает html, head или body тег и предполагается только для отображения содержимого и заголовка. Однако, когда я получил доступ к этому файлу по почтовому запросу и попытался визуализируйте файлы, а затем проверьте выведенный HTML-файл из моего браузера, содержимое состояло только из index2.ejs file, что означает, что у него нет html, body, head tag.

так что я упускаю? И если я хочу включить библиотеку Javascript по <script src='some_file.js'></script>, должен ли я добавить другое свойство рендеринга при попытке рендеринга в ...правильно?

3 ответов


во-первых, я думаю, что вы смущены о том, как res.render работает. Согласно docs:

res.render (view, [locals], обратный вызов)

отображение представления с обратным вызовом, отвечающим отображаемой строкой.

что объясняет, почему вы видите только содержимое index2.ejs на вашей HTML-странице.


теперь есть несколько способов достижения вашей цели, которая заключается в вложенности представлений в представлениях. Начало из Экспресс-3.X, вы должны использовать include.В этом случае, вы можете переписать ваш вид такой:
1 - Определение заголовка.файл ejs, который будет выглядеть так пример.
2 - определить нижний колонтитул.EJS по. который будет выглядеть как этот другой пример.
3 - в вашем index2.ejs, включите эти два файла, например:

<% 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 %>

второй метод заключается в использовании ejs-местные жители, который позволяет вставлять любое представление, только указав их путь:

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

и, в вашем index1.ejs, у вас будет:

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

преимущество этого метода заключается в том, что вы можете передавать дополнительные значения в свой вид, используя дополнительный объект. Более подробную информацию см. На странице EJS-locals github.


обновление: EJS-mate Express 4.х местные для сервировки, частичная.

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

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


хорошо для стандартного HTML, такого как head,footer,sidebars или что-то еще .. есть фрагментов пример все объясняет ..