【发布时间】:2023-01-12 05:50:10
【问题描述】:
我遇到了很多麻烦,只是试图让 EJS 模板文件识别一个变量,该变量将 SQLite3 表查询的行存储在相应的 .js 文件中。启动服务器并尝试访问该路由时,我在 EJS 文件中使用的变量出现 ReferenceError。
对于上下文,它是一个微型博客项目,我希望作者能够将文章草稿保存到数据库中,并且用户能够稍后回来修改或发布它们。
这是我的“author.js”文件:
// Author Page
const express = require("express");
const router = express.Router();
const assert = require('assert');
/**
* @desc retrieves draft articles
*/
router.get("/author-home", (req, res, next) => {
//Use this pattern to retrieve data
//NB. it's better NOT to use arrow functions for callbacks with this library
global.db.all("SELECT * FROM draftArticles", function (err, rows) {
if (err) {
next(err); //send the error on to the error handler
} else {
res.json(rows);
}
});
});
/**
* @desc Renders the author page
*/
router.get("/author", (req, res) => {
res.render("author-home", data);
});
module.exports = router;
在我的“author-home.ejs”文件中,我试图在一个元素中插入各种文章属性,如下所示:
<td><% data[0].article_title %> </td>
<td><% data[0].article_subtitle %> </td>
...ETC。
谁能告诉我我做错了什么?如果有帮助,我还可以发布我的“index.js”文件的代码。提前谢谢了
编辑:
在发送了一些建议并突出显示“数据”变量的范围问题后,我将 author.js 中的代码更正(至少,我相信如此)如下:
// Author Page
const express = require("express");
const router = express.Router();
const assert = require('assert');
router.get('/author-home', (req, res, next) => {
global.db.all('SELECT * FROM draftArticles', function (err, rows) {
if (err) {
console.log("No data found.")
next(err); //send the error on to the error handler
return;
}
res.render('author-home', { data: rows });
});
});
module.exports = router;
但是,当我尝试访问我的 EJS 文件中的 data 时,我仍然收到 referenceError。
正如建议的那样,我也尝试像这样传递静态数据:
let dummyData = "This is test data";
router.get('/author-home', (req, res, next) => {
res.render('author-home', { data: dummyData });
});
还收到referenceError。
【问题讨论】:
-
您是否尝试过在数据变量中设置静态数据并传递给模板?可能是数据的问题。
-
res.render("author-home", data);中的data变量未定义。或者至少我看不到您在哪里定义它并为其分配任何值。 -
谢谢@Molda,我已经更正了这一点。不幸的是,在我的 author-home.ejs 文件中尝试访问
data时,我仍然收到 referenceError