我有一个带一些种子数据的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
。
问题是我从路由目录发出呼叫后,正在根目录中构建一个新的数据库文件。我期望从models目录中调用crud文件。
为了阻止相对路径,我使用了以下解决方案:
我的conn.js文件现在看起来像这样:
const sqlite3 = require('sqlite3').verbose();
var path = require('path')
db_path = path.join(__dirname, 'db.db');
const db = new sqlite3.Database(db_path , (err) => {
if (err){
console.log('err' + err);
}
console.log('connected to db');
});
module.exports = db;
希望这可以帮助遇到相同问题的人。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句