未定义 EJS <%- 正文 %> 主体



我有一个要连接到主模板的主体。但不幸的是,<%- body %>不工作,正在返回undefined。我试过include(),包括file.ejs,直接路径。然而,这仍然不起作用,所以我不知道该怎么办


> app.js
var path = require('path');
var express = require('express');
var app = express();
var expressLayouts = require('express-ejs-layouts');
console.clear();
// EJS //
app.set("view engine", "ejs");
app.use(expressLayouts);
app.set("views", path.join(__dirname, "/mvc/views"));
// SRC FOLDER PERMISSION //
app.use('/src', express.static(path.join(__dirname, 'src')));
// MODULES //
var controller = require(path.join(__dirname, "/mvc/controller/controller"));
// USING CONTROLLER MODULE //
app.use("/", controller);
app.listen(8080);

> 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:laragonwwwgaleri-uygulamasimvcviewstemplate.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:laragonwwwgaleri-uygulamasimvcviewstemplate.ejs:10:16)
at template (C:laragonwwwgaleri-uygulamasinode_modulesejslibejs.js:691:17)
at tryHandleCache (C:laragonwwwgaleri-uygulamasinode_modulesejslibejs.js:272:36)
at View.exports.renderFile [as engine] (C:laragonwwwgaleri-uygulamasinode_modulesejslibejs.js:489:10)
at View.render (C:laragonwwwgaleri-uygulamasinode_modulesexpresslibview.js:135:8)
at tryRender (C:laragonwwwgaleri-uygulamasinode_modulesexpresslibapplication.js:640:10)
at Function.render (C:laragonwwwgaleri-uygulamasinode_modulesexpresslibapplication.js:592:3)
at ServerResponse.render (C:laragonwwwgaleri-uygulamasinode_modulesexpresslibresponse.js:1012:7)
at ServerResponse.res.render (C:laragonwwwgaleri-uygulamasinode_modulesexpress-ejs-layoutslibexpress-layouts.js:77:18)
at module.exports.index (C:laragonwwwgaleri-uygulamasimvccontrollercontroller.js:5:9)

有人知道出了什么问题吗?任何帮助都将不胜感激。提前感谢!

您没有将body参数传递到模板中

res.render("template", { body: "Some text" })

我有一个更好的解决方案 试试这个:

  1. 首先将template.ejs文件名更改为layout.ejs。因为express-ejs布局会在视图文件夹中查找layout.ej

  2. 在home.ejs内部添加<%-contentFor('body'(%>在你的代码顶部

  3. 现在你可以用它的布局来渲染你的home.ejs了

    // >mvc/controller/controller.js
    module.exports.index = function(req, res) {
    res.render("home"); 
    }
    

我希望我能帮上忙😊.

我建议你看看这里了解更多信息:https://www.npmjs.com/package/express-ejs-layouts

我找到了解决方案!

  1. 首先我更改了文件名。template.ejs到layout.ejs
  2. 我在controller.js中将res.render("template")更改为res.render("layout")。因此,实际布局已写在屏幕上
  3. 我想在layout.ejs中写home.ejs。因此我将<%-body%>更改为<%- include('home.ejs')%>

最新更新