Javascript ejs<;%-身体%>;主体未定义
我有一个要连接到主模板的主体。但不幸的是Javascript ejs<;%-身体%>;主体未定义,javascript,node.js,express,ejs,Javascript,Node.js,Express,Ejs,我有一个要连接到主模板的主体。但不幸的是不起作用,返回未定义的。我已经尝试了include(),includefile.ejs,直接使用路径。然而,这仍然不起作用,所以我不知道该怎么办。这是我的密码: >mvc/views/template.ejs >mvc/views/home.ejs >结果 参考错误:C:\laragon\www\galeri-Uquiulamasi\mvc\views\template.ejs:18 16| 17| >> 18|
不起作用,返回未定义的。我已经尝试了include()
,includefile.ejs
,直接使用路径。然而,这仍然不起作用,所以我不知道该怎么办。这是我的密码:
>mvc/views/template.ejs
>mvc/views/home.ejs
>结果
参考错误:C:\laragon\www\galeri-Uquiulamasi\mvc\views\template.ejs:18
16|
17|
>> 18|
19|
20|
21|
主体未定义
评估时(C:\laragon\www\galeri-Uquiulamasi\mvc\views\template.ejs:10:16)
在模板上(C:\laragon\www\galeri-Uquiulamasi\node\u modules\ejs\lib\ejs.js:691:17)
在tryHandleCache(C:\laragon\www\galeri-uigulamasi\node\u modules\ejs\lib\ejs.js:272:36)
在View.exports.renderFile[作为引擎](C:\laragon\www\galeri-Uquiulamasi\node\u-modules\ejs\lib\ejs.js:489:10)
在View.render(C:\laragon\www\galeri-uikulamasi\node\u-modules\express\lib\View.js:135:8)
在tryRender(C:\laragon\www\galeri-Uquiulamasi\node\u modules\express\lib\application.js:640:10)
在Function.render(C:\laragon\www\galeri-uikulamasi\node\u-modules\express\lib\application.js:592:3)
在ServerResponse.render(C:\laragon\www\galeri-uigulamasi\node\u modules\express\lib\response.js:1012:7)
在ServerResponse.res.render(C:\laragon\www\galeri-uigulamasi\node\u modules\express-ejs-layouts\lib\express-layouts.js:77:18)
在module.exports.index(C:\laragon\www\galeri-Uquiulamasi\mvc\controller\controller.js:5:9)
有人知道出了什么问题吗?任何帮助都将不胜感激。提前谢谢 您没有将正文
参数传递到模板中
res.render("template", { body: "Some text" })
我找到了解决办法
首先,我更改了文件名。template.ejs到layout.ejs
我已将controller.js中的res.render(“模板”)
更改为res.render(“布局”)
。因此,实际布局被写在屏幕上
我想在layout.ejs中写入home.ejs。因此,我将
更改为
我为您提供了更好的解决方案。
试试这个:
首先将“template.ejs”文件名更改为“layout.ejs”。因为express ejs layouts将在您的视图文件夹中查找layout.ejs
在home.ejs中,在代码顶部添加
现在,您可以使用youre home.ejs的布局渲染它
我希望我可以帮助您需要res.render('home')
,而不是res.render('template')
,它不起作用,但我尝试了这个方法并成功了:res.render('layout'),因为模块需要我提供一个名为'layout'的文件。实际上,body是另一个模板,所以是html内容。我不想发送参数,只需将文件写入主模板('layout')@VolkanCoskun您的问题中不清楚body是您希望在布局中呈现的模板,因此假设您希望从web服务器传递某些内容。但这意味着您现在只有一个页面可以显示。布局的思想是,它应用于您想要的任何内容模板。请使用原始的
但重命名的文件再次尝试res.render('home')
。我已经向您展示了我有两个文件,您可能看不到它们('layout.ejs'和'home.ejs')。我想写一个名为“layout”的文件。我试过你的解决方案,但没有成功。也许我还不清楚。布局模板的要点是,每当您加载另一个模板(例如,home
)时,express ejs layouts
库会将其计算为HTML,然后实际呈现layout
,并将home
呈现的结果传递到body
参数中。直接渲染布局通常没有意义,因为这是库的工作!因此,您通常会编写res.render('home')
,并在其中自动渲染layout
,其中包含home
的结果。查看“感谢您的解决方案”。有些人不懂如何回答问题。并对问题给出否定的观点。当做
> mvc/controller/controller.js
var express = require('express');
var router = express.Router();
module.exports.index = function(req, res) {
res.render("template");
}
router.get("/", module.exports.index);
module.exports = router;
> mvc/views/template.ejs
<body>
<div class="container-fluid px-0 h-100">
<%-body%>
</div>
</body>
> mvc/views/home.ejs
<nav class="h-100 d-flex justify-content-center align-items-center text-center">
<div class="line w-100">
<span class="d-block"></span>
<span class="d-block"></span>
</div>
</nav>
> result
ReferenceError: C:\laragon\www\galeri-uygulamasi\mvc\views\template.ejs:18
16| <body>
17| <div class="container-fluid px-0 h-100">
>> 18| <%-body%>
19| </div>
20| </body>
21|
body is not defined
at eval (C:\laragon\www\galeri-uygulamasi\mvc\views\template.ejs:10:16)
at template (C:\laragon\www\galeri-uygulamasi\node_modules\ejs\lib\ejs.js:691:17)
at tryHandleCache (C:\laragon\www\galeri-uygulamasi\node_modules\ejs\lib\ejs.js:272:36)
at View.exports.renderFile [as engine] (C:\laragon\www\galeri-uygulamasi\node_modules\ejs\lib\ejs.js:489:10)
at View.render (C:\laragon\www\galeri-uygulamasi\node_modules\express\lib\view.js:135:8)
at tryRender (C:\laragon\www\galeri-uygulamasi\node_modules\express\lib\application.js:640:10)
at Function.render (C:\laragon\www\galeri-uygulamasi\node_modules\express\lib\application.js:592:3)
at ServerResponse.render (C:\laragon\www\galeri-uygulamasi\node_modules\express\lib\response.js:1012:7)
at ServerResponse.res.render (C:\laragon\www\galeri-uygulamasi\node_modules\express-ejs-layouts\lib\express-layouts.js:77:18)
at module.exports.index (C:\laragon\www\galeri-uygulamasi\mvc\controller\controller.js:5:9)
res.render("template", { body: "Some text" })
// >mvc/controller/controller.js
module.exports.index = function(req, res) {
res.render("home");
}