我是NodeJS的新手,我正在尝试通过构建购物车Web应用程序来学习它。我将数据存储在SQLite数据库中,但似乎无法访问它。 .all()方法返回一个Promise对象,但我不知道如何获取数据库中的项目。
我遵循了本教程:https://stackabuse.com/a-sqlite-tutorial-with-node-js/来构建数据访问对象和两个模型:ItemRepository和CartRepository。
这是我的数据访问对象脚本中的get方法:
get(sql, params = []) {
return new Promise((resolve, reject) => {
this.db.get(sql, params, (err, result) => {
if (err) {
console.log('Error running sql: ' + sql)
console.log(err)
reject(err)
} else {
resolve(result)
}
})
}
这是我的index.js
router.get('/', function(req, res, next) {
var dao = new AppDAO('./database.sqlite3');
var itemRepo = new ItemRepository(dao);
var cartRepo = new CartRepository(dao);
items = itemRepo.getAll();
console.log(items);
var itemRows = [];
var rowSize = 3;
for (var i = 0; i < items.length; i += rowSize){
itemRows.push(items.slice(i, i+rowSize));
}
res.render('shop/index', { title: 'sHOP', items: itemRows })
});
关于如何获取表的内容而不是Promise对象,我有些困惑。
答案 0 :(得分:1)
我将建议您阅读Promise和异步/等待或Bluebird Promise。您将需要在then
上使用promise
方法来获取实际结果,如下所示。
router.get('/', function(req, res, next) {
var dao = new AppDAO('./database.sqlite3');
var itemRepo = new ItemRepository(dao);
var cartRepo = new CartRepository(dao);
itemRepo.getAll().then(( items) =>{
console.log(items);
var itemRows = [];
var rowSize = 3;
for (var i = 0; i < items.length; i += rowSize){
itemRows.push(items.slice(i, i+rowSize));
}
res.render('shop/index', { title: 'sHOP', items: itemRows })
})
});