[英]NodeJS and Express - Exports function skips over SQLite3 DB query
[英]Node express sqlite3 . When I use a service for the DB query I get nothing back
我将 sqlite3 数据库用于 node.js 快递。 如果我按照 router.js 中的教程返回请求,它会起作用,我会得到所有项目。 现在我创建了一个服务来从路由(控制器)获取 sql。 但不幸的是,我没有得到任何回报。 我已经在服务中使用 async await 进行了尝试。 那也没有帮助。
我的代码:
// router.js
const dbService = require("../services/dbService/");
router.get("/users", (req, res, next) => {
try {
res.status(200).send({
data: dbService.getAllUsers();
})
return;
} catch(err) {
next(err);
}
});
// dbService.js
const db = require("../db/database.js");
module.exports = {
getAllUsers() {
const sql = "select * from users";
db.all(sql,[], (err, rows) => {
return {"data": rows};
});
}
}
出于简单的原因,我没有在代码中包含错误处理。 为什么我无法从服务中获取数据库值? 我需要做什么?
提前致谢! 麦克风
您正在与异步 JS 发生冲突。 db.all
将结果返回给回调。
使用回调的重构看起来像:
// router.js
const dbService = require("../services/dbService/");
router.get("/users", (req, res, next) => {
dbService.getAllUsers((err, result) => {
if (err) next(err);
res.json({
data: result;
});
});
});
// dbService.js
const db = require("../db/database.js");
module.exports = {
getAllUsers(cb) {
const sql = "select * from users";
db.all(sql,[], (err, rows) => {
cb(err, rows);
});
}
}
承诺看起来像:
// router.js
const dbService = require("../services/dbService/");
router.get("/users", async (req, res, next) => {
try {
const result = await dbService.getAllUsers();
res.json({
data: result;
});
} catch (err) {
next(err);
}
});
// dbService.js
const db = require("../db/database.js");
module.exports = {
getAllUsers(cb) {
const sql = "select * from users";
return new Promise((resolve, reject) =>
db.all(sql,[], (err, rows) => {
if (err) reject(err);
resolve(rows);
})
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.