繁体   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