Home > Blockchain >  Node express sqlite3 . When I use a service for the DB query I get nothing back
Node express sqlite3 . When I use a service for the DB query I get nothing back

Time:09-28

I use a sqlite3 database for a node.js express. If I return the request as in the tutorial in router.js it works and I get all the items. Now I have created a service to get the sql from the route (controller). But unfortunately I don't get anything back. I had already tried it with async await in the service. That didn't help either.

my code:

// 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};
    });
  }
}

For simple reasons, I have not included error handling in the code. Why can't I get database values from the service? What do I have to do?

Thanks in advance! Mike

CodePudding user response:

You're running afoul of asynchronous JS. db.all returns results to the callback.

A refactor to use callbacks would look something like:

// 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);
    });
  }
}

And promises woudl look like:

// 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);
      })
    );
  }
}

  • Related