Mysql
 sql >> Base de données >  >> RDS >> Mysql

Approche de plusieurs requêtes MySQL avec Node.js

Il faut éviter la pyramide du destin :

var express = require('express');
var Q = require('Q');
var app = express();

app.get('/',function(req,res){
    var mysql      = require('mysql');

    var connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'root',
        password : ''
    });

    connection.connect();

    function doQuery1(){
        var defered = Q.defer();
        connection.query('SELECT 1 AS solution',defered.makeNodeResolver());
        return defered.promise;
    }

    function doQuery2(){
        var defered = Q.defer();
        connection.query('SELECT 2 AS solution',defered.makeNodeResolver());
        return defered.promise;
    }

    Q.all([doQuery1(),doQuery2()]).then(function(results){
        res.send(JSON.stringify(results[0][0][0].solution+results[1][0][0].solution));
        // Hint : your third query would go here
    });

    connection.end();

});

app.listen(80);
console.log('Listening on port 80');

Cet exemple montre un résultat qui dépend de 2 valeurs calculées indépendantes. Chacune de ces valeurs est interrogée dans doQuery1 et doQuery2. Ils sont exécutés en séquence, mais de manière asynchrone.

Ensuite, vous pouvez voir Q.all(... qui appellent essentiellement le rappel "alors" en cas de succès. Dans ce rappel, le calcul est effectué.

Utilisation des promesses (détails :Github Q :promesse pour Javascript et wikipedia ) permettent de rendre votre code plus propre, de séparer le calcul et la gestion des résultats et de déplacer les choses.

Regardez comme il serait facile d'ajouter "doQuery3" comme prérequis pour votre calcul !

Et ci-dessous le "package.json" appartenant à l'exemple de code :

{
    "name": "hello-world",
    "description": "hello world test app",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
        "express": "3.2.0",
        "q": "0.9.3",
        "mysql":"2.0.0-alpha7"
    }
}