【发布时间】:2020-08-13 18:46:53
【问题描述】:
我有一个 sqlite3 数据库,其中包含一些种子数据。我有以下功能,当我从终端运行它时它确实有效:
const db = require('./conn');
function select_user (callback) {
let q = `select uid, uname, pwd from usr`;
db.all(q, function (err, rows) {
if (err) {
console.log('select error = ' + err)
callback(err);
}
callback(rows);
});
}
// select_user((d) => {console.log(d)});
module.exports = { select_user };
但是,当我从路由调用时,我得到一个空数组。这是代码:
var crud = require('../models/crud');
router.get('/', function(req, res, next) {
crud.select_user((d) => { res.render('index.ejs', { title: JSON.stringify(d)})});
})
这将呈现“这是一个 [] 页面”我希望它呈现返回的数据。我到处寻找答案,看到了许多显然有效的例子,但我看不出我在这里做错了什么。
补充说明:如果我不使用 JSON.stringify(),结果是“未定义”。
如果它们是相关的,这些是被调用的文件:
conn.js:
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('db.sql', (err) => {
if (err){
console.log('err' + err);
}
console.log('connected to db');
});
module.exports = db;
index.ejs:
<p>this is a
<% if (title) { %>
<%- title %>
<% } %>
page</p>
app.js 是标准的 Express 模板。我没有对该文件进行任何重大更改。
另一个更新:
我破坏了文件树并重新开始。数据库可以连接并构建usr 表并加载数据。现在,当我从路由中调用时,我会收到Error: SQLITE_ERROR: no such table: usr。
【问题讨论】:
-
你如何处理
index.ejs中的title? -
@oneturkmen;它只是一个 html 模板。如果我在那里有一个常规单词,它会很好。我还尝试简单地 console.log() 结果,它呈现“未定义”,除非我使用 JSON.stringify(),它将呈现“[]”。我删除了所有这些,希望它更容易理解。
-
在渲染 ejs 模板之前尝试在回调内的控制台中登录值。那里 d 的值是多少。
crud.select_user((d) => { console.log(d); res.render('index.ejs', { title: JSON.stringify(d)})}) -
@anees,值是[],如果我在select_user()中记录回调之前的值也是[]。