Saltar al contenido

node.js – sqlite3 lee todos los registros en la tabla y regresa

Solución:

Pude encontrar respuesta a esta pregunta. Aquí está para cualquiera que esté buscando:

var sqlite3 = require("sqlite3").verbose();

var readRecordsFromMediaTable = function(callback){

    var db = new sqlite3.Database(file, sqlite3.OPEN_READONLY);

    db.serialize(function() {

        db.all("SELECT * FROM MediaTable", function(err, allRows) {

            if(err != null){
                console.log(err);
                callback(err);
            }

            console.log(util.inspect(allRows));

            callback(allRows);
            db.close();

        });


    });

}

Un método basado en promesas

var readRecordsFromMediaTable = function(){
  return new Promise(function (resolve, reject) {
    var responseObj;
    db.all("SELECT * FROM MediaTable", null, function cb(err, rows) {
      if (err) {
        responseObj = {
          'error': err
        };
        reject(responseObj);
      } else {
        responseObj = {
          statement: this,
          rows: rows
        };
        resolve(responseObj);
      }
      db.close();
    });
  });
}

La respuesta aceptada usando db.all con una devolución de llamada es correcta ya que db.each no era realmente necesario. Sin embargo, si se necesitaba db.each, la solución se proporciona en la documentación de la API node-sqlite3, https://github.com/mapbox/node-sqlite3/wiki/API#databaseeachsql-param–callback-complete:

Base de datos # cada (sql, [param, …], [callback], [complete])

Después de que se hayan llamado todas las devoluciones de llamada de fila, se llamará a la devolución de llamada de finalización si está presente. El primer argumento es un objeto de error y el segundo argumento es el número de filas recuperadas

Entonces, donde finaliza la primera devolución de llamada, en lugar de solo} poner}, función () {…}. Algo como esto:

var readRecordsFromMediaTable = function(callback){

var db = new sqlite3.Database(file, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE);

var allRecords = [];

    db.serialize(function() {

        db.each("SELECT * FROM MediaTable", function(err, row) {

            myLib.generateLog(levelDebug, util.inspect(row));
            allRecords.push(row);

        }, function(err, count) {

            callback(allRecords);
            db.close();

        }
    });
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *