Tengo un código de Node.js que intenta actualizar una base de datos en algo como lo siguiente:

connection.query(command, function(err,rows) {
        if (err){
            console.log(command);
            console.log("ERROR");
            console.log(err);
            return;
        }
        console.log("good");
    });

Lo anterior se ejecuta repetidamente para diferentes valores de "comando", generando así diferentes consultas a la base de datos. El problema es que cuando hay un error, la consulta incorrecta se imprime en console.log(command). Esto se debe a que el momento en que se agrega la consulta a la cola y el momento en que se ejecuta la consulta no son iguales, por lo que el valor de "comando" en cada uno de estos momentos no es el mismo. ¿Hay alguna forma de evitar esto?

Nota: console.log(err) imprime el error en sí, y también parte de la consulta, pero solo imprime la línea donde ocurrió el error. Quiero imprimir la consulta completa.

18
user308485 15 dic. 2016 a las 20:14

2 respuestas

La mejor respuesta

Según docs, puede usar query.sql para obtener la ejecución real consulta.

var post  = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
  // Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'

En este caso, será

connection.query(command, function (err, rows) {
    if (err) {
        console.log('this.sql', this.sql); //command/query
        console.log(command);
        console.log("ERROR");
        console.log(err);
        return;
    }
    console.log("good");
});
34
Sridhar 15 dic. 2016 a las 17:40

Si @Sridhar answer no funciona para usted, probablemente porque está utilizando la API de promesa que aún no devuelve la consulta SQL, puede usar:

const sql = connection.format("SELECT * FROM table WHERE foo = ?", ["bar"]);
console.log(sql);
const [rows] = await connection.query(sql);

Documentación: https://github.com/mysqljs/mysql#preparing-queries

8
Yves M. 16 ene. 2019 a las 14:27