Maison  >  Questions et réponses  >  le corps du texte

Comment transmettre des paramètres à la fonction de rappel de requête MySQL dans Node.js

<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粉078945182P粉078945182424 Il y a quelques jours618

répondre à tous(2)je répondrai

  • P粉212971745

    P粉2129717452023-08-23 13:55:53

    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)

    répondre
    0
  • P粉476046165

    P粉4760461652023-08-23 11:39:22

    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

    répondre
    0
  • Annulerrépondre