我將 sqlite3 資料庫用于 node.js express。如果我按照 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};
});
}
}
出于簡單的原因,我沒有在代碼中包含錯誤處理。為什么我無法從服務中獲取資料庫值?我需要做什么?
提前致謝!麥克風
uj5u.com熱心網友回復:
您正在與異步 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);
})
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/510360.html
上一篇:為什么我收到型別錯誤:res.send不是Axios的函式。Res.send在res.send之外作業,但我需要來自API的資料
