Comment transmettre des paramètres à la fonction de rappel de requête MySQL dans Node.js
P粉078945182
P粉078945182 2023-08-22 15:44:32
0
2
663
<p>J'essaie de trouver la bonne façon de transmettre des données personnalisées à l'appel de requête afin qu'elles soient disponibles dans le rappel. J'utilise la bibliothèque MySQL (toutes les dernières versions) dans nodejs. </p> <p>J'ai un appel connection.query(sql, function(err, result) {...});</p> <p>Je ne trouve pas de moyen de 1) transmettre des données/paramètres personnalisés à l'appel afin qu'ils soient disponibles lorsque le rappel est appelé. Alors, quelle est la bonne chose à faire ? </p> <p>J'ai le pseudocode suivant : </p> <pre class="brush:php;toolbar:false;">... pour (ix dans SomeJSONArray) { sql = "SELECT (1) FROM someTable WHERE someColumn = " + SomeJSONArray[ix].id; connexion.query(sql, fonction (erreur, résultat) { ... var y = SomeJSONArray[ix].id; } ; }</pré> <p>À partir du code ci-dessus, je dois pouvoir transmettre la valeur actuelle de "ix" utilisée dans la requête au rappel lui-même. </p> <p>Comment puis-je procéder ? </p>
P粉078945182
P粉078945182

répondre à tous(2)
P粉212971745

Pour répondre à la question initiale et donner un exemple, enveloppez la fonction de rappel dans une fonction anonyme qui crée immédiatement une portée "instantané" contenant les données entrantes.

var ix=1;
connection.query('SELECT 1',
    (function(ix){
        return function(err, rows, fields) {
            console.log("ix="+ix);
            console.log(rows);
        };
    })(ix));

Pour ceux comme moi qui viennent d'apprendre ce concept, le dernier })(ix)); est la valeur de la var externe ix=1 qui est transmise à (function(ix){. Si vous console. log("ix ="+abc); est remplacé par console.log("ix="+abc);, puis il peut être renommé en (function(abc){.

fwiw (Merci à Chris pour le lien, comblant les lacunes pour trouver la solution)

P粉476046165

Si vous utilisez node-mysql, veuillez suivre les instructions de la documentation :

connection.query(
    'SELECT * FROM table WHERE id=? LIMIT ?, 5',[ user_id, start ], 
    function (err, results) {

    }
);

Le code permettant d'échapper correctement les chaînes est également fourni dans la documentation, mais l'utilisation d'un tableau dans un appel de requête l'échappera automatiquement pour vous.

https://github.com/felixge/node-mysql

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal