簡體   English   中英

節點快遞 sqlite3。 當我使用數據庫查詢服務時,我什么也得不到

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM