当前位置: 首页 > 面试题库 >

如何在Node.js和Express中以嵌套形式呈现多个.ejs文件?

董品
2023-03-14
问题内容

如何.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})
            });
        });
    }
});

where index.ejs由非常基本的html标记(例如html,head,body和一个p标记)组成并包含<%- content %>在其中,其中内容假定由另一个.ejs文件呈现,其中不包含html,head或body标记,仅假定呈现了内容和标题。但是,当我通过POST请求访问此文件并尝试呈现文件,然后从浏览器中签出输出的HTML文件时,内容仅包含index2.ejs文件,这意味着它没有html,body和head标记。

那我想念什么呢?而且,如果我想通过添加一个Javascript库<script src='some_file.js'></script>,当我尝试在index2.ejs文件中进行渲染时,是否应该添加另一个渲染属性…对吗?


问题答案:

首先,我认为您对res.render操作方式感到困惑。根据文档:

res.render(视图,[本地],回调)

使用回调响应渲染的字符串来渲染视图。

这就解释了为什么只在HTML页面中看到index2.ejs的内容。

现在,有多种方法可以实现您的目标,即在视图中嵌套视图。从Express 3.x开始,您需要使用include。在这种情况下,您可以这样重写视图:
1-定义header.ejs文件,该文件类似于以下示例。
2-定义一个footer.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-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>

这种方法的优点是您可以使用额外的对象将额外的值传递给视图。请查看ejs-locals github页面以获取更多详细信息。



 类似资料:
  • 问题内容: 在我的index.ejs中,我有以下代码: 在我的节点中 但是,我在页面上获得 如果我写 我得到: 有没有一种方法可以传递 JS可读 的JSON ? 问题答案: 哦,那很容易,不要使用,而是使用。例如: 第一个将以HTML呈现,第二个将呈现变量(按原样评估)

  • 我正在节点服务器上使用express ejs在多视图应用程序中呈现视图。在客户端,我使用的是AngularJS。初始视图是一个登录页面,当使用时,该页面会正确显示。我想在用户成功连接时呈现一个新的视图,但是对于下一个,它仍然停留在登录页面上,尽管我在客户端接收到了正确的HTML。下面是我的相关代码: 部分文件结构: server.js Script.js login.ejs Home.ejs 这是

  • 我有一个使用EJS模板的NodeJS、Express3应用程序。我有一个路线,使‘预览’一些表单字段包含HTML和CSS张贴。它只是将它们插入并呈现我的模板,如下所示。 我现在想做的是一个类似的路线,强制下载文件,而不是… 我看到有一个和,但是我如何将这些与我的EJS“预览”视图模板一起使用呢? 附注。-我也在使用Mikeal的是同一个应用程序。我想知道是否有一种方法,我可以使用管道到fs(文件系

  • 我只是想安装node.js/express/ejs.我知道ejs不是真正的超文本标记语言,所以我很难只显示一个简单的图像。有人能给我指出正确的方向吗? 目录结构为: 我的应用程序/服务器。js myApp/视图/索引。ejs myApp/徽标。jpg 现在我有 我走错方向了吗?谢谢

  • 我正在尝试处理一个对我来说相当复杂的表格... 我们有收藏,其中包含书籍(OneTo多国),文章(OneTo多国)及其作者(ManyTo多国)。 用户可以编辑一本书:他可以添加或删除一篇文章,还可以为每篇文章添加或删除一些作者。有嵌套表单:book 实体描述看起来很好,数据库是由控制台生成的,看起来是一致的。 如果我不必与使用图书版表单的作者打交道,这就很好了。如果作者存在,我有一个重复条目错误。

  • 问题内容: 我正在尝试按照https://stackoverflow.com/a/18633827/2063561的说明进行操作,但是仍然无法加载styles.css。 从app.js 在我的.ejs文件中,我尝试了这两行 都不加载css。我进入开发人员的控制台,注意到类型设置为’text / html’而不是’text / css’。 我的路看起来像 问题答案: 在server.js文件中使用它