Comment transmettre des paramètres à la fonction de rappel de requête MySQL dans Node.js
P粉078945182
2023-08-22 15:44:32
<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>
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.
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)
Si vous utilisez node-mysql, veuillez suivre les instructions de la documentation :
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