Как сделать несколько.файлы 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
или что-то еще ..
есть фрагментов пример все объясняет ..