web-dev-qa-db-fra.com

Node.js/MySQL: Impression de la requête réelle dans le journal des erreurs dans node.js

J'ai du code Node.js qui tente de mettre à jour une base de données de la manière suivante:

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

Ce qui précède est exécuté à plusieurs reprises pour différentes valeurs de "commande", générant ainsi différentes requêtes dans la base de données. Le problème est que lorsqu'il y a une erreur, la requête incorrecte est imprimée dans console.log(command). En effet, l'heure à laquelle la requête est ajoutée à la file d'attente et l'heure à laquelle la requête est réellement exécutée ne sont pas identiques. La valeur de "commande" n'est donc pas la même pour chacun de ces moments. Y a-t-il un moyen de contourner ceci?

Remarque: console.log(err) affiche l'erreur elle-même, ainsi qu'une partie de la requête, mais uniquement la ligne où l'erreur s'est produite. Je veux imprimer la requête entière.

7
user308485

Conformément à docs , vous pouvez utiliser query.sql pour obtenir la requête exécutée. 

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'

Dans ce cas, ce sera

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");
});
20
Sridhar

Si @Sridhar answer ne fonctionne pas pour vous, probablement parce que vous utilisez une API de promesse qui ne renvoie pas encore la requête SQL , vous pouvez utiliser:

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

Documentation: https://github.com/mysqljs/mysql#preparing-queries

0
Yves M.