node.js - Sqlite .all() 函数返回一个承诺,但我需要数据库项目...?
问题描述
我是 NodeJS 的新手,我正在尝试通过构建购物车网络应用程序来学习它。我将数据存储在 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 对象,我有点迷茫。
解决方案
我会推荐你阅读 promises 和 async/await 或 bluebird promises。您将需要使用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 })
})
});
推荐阅读
- python - 当我 pip install pickle 我面临这个错误错误:需要 Microsoft Visual C++ 14.0 或更高版本。使用“Microsoft C++ Build Tools”获取它:
- python - 如何访问硒中的多个文本框
- chef-infra - 在厨师检查中实现跳过条件
- android - 撰写中的分享按钮
- firebase - 为什么这个 Firebase Firestore orderBy 查询不起作用?
- javascript - 在使用 nodejs 和 express 时如何从另一个 JavaScript 文件获得响应?
- bluetooth - 为什么这一系列的动作可以按照我在 Arduino 代码中的意图运行?
- find - 在 Linux 上查找四月修改过的文件
- visual-studio-code - Altair 绘图不再显示在 VS Code 中
- javascript - 创建自定义函数以删除数组中所有出现的元素