我正在制作一个ejs页面,我想查询SQL数据并将其显示在页面上。它总是不显示,或者不太可能显示[对象数据库]之类的内容。如何正确显示数据?
我正在尝试在EJS页面上显示来自NodeJS的SQLite3查询数据。
我尝试了很多事情,例如使db.all()的回调设置一个变量(例如foo),然后在我的ejs页面中写了<%= foo %>
,但它没有用。有趣的是,当我做console.log();时,在回调内部,它显示了与查询一起使用的所有行,但是当我设置一个变量并尝试在回调外部使用它时,如果我预定义,我将得到ReferenceError(未定义)或得到一个空数组并将其行数据推入其中。
我的(简化的)EJS文件
<%
db.all("SELECT username FROM users WHERE username = 'foo'", [], (err, rows) => {
if (err) console.error(err.message);
user = rows;
});
%>
<body>
<%=user%>
</body>
我的(简体)节点应用程序文件 (我的模块是express,http,path,sqlite3,ejs,fs和ipware)
const src = path.resolve() + "/static/";
// Initialization
const app = new express();
app.set("view engine", "ejs");
let db = new sqlite.Database("db.db", (err) => {
if (err) console.error(err.message);
console.log("Connected to SQLite DB");
});
// SQLite3 stuff
//db.run("DROP TABLE IF EXISTS users");
db.run("CREATE TABLE IF NOT EXISTS users(username TEXT PRIMARY KEY, password TEXT NOT NULL)");
db.run("INSERT OR IGNORE INTO users VALUES ('foo', 'bar')");
// URLS
app.get('/', function (req, res) {
res.render("main", {
src: src,
path: path,
sqlite: sqlite,
db: db
});
console.log(`\nHomepage request from ${IP(req)}`)
});
我知道如何修改表和执行SQL任务,但是我不知道如何设置字典来查询结果,我的应用程序确实需要这样做。谢谢。
编辑:我已经阅读了有关异步函数以及如何避免使Callback Hell的信息,我似乎不太了解异步函数。如果有人可以解释一下它们是如何工作的,以及我如何等待回调完成,就足够了。