![](/img/trans.png)
[英]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.