Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ansatz für mehrere MySQL-Abfragen mit Node.js

Man sollte die Pyramide des Unheils vermeiden:

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');

Dieses Beispiel zeigt ein Ergebnis, das von 2 unabhängigen berechneten Werten abhängt. Jeder dieser Werte wird in doQuery1 und doQuery2 abgefragt. Sie werden nacheinander, aber asynchron ausgeführt.

Als nächstes sehen Sie Q.all(... die im Grunde den "dann"-Rückruf bei Erfolg aufrufen. Innerhalb dieses Rückrufs wird die Berechnung durchgeführt.

Versprechen verwenden (Details:Github Q:Versprechen für Javascript ). und wikipedia ) ermöglichen es, Ihren Code sauberer zu machen, die Berechnung und Behandlung von Ergebnissen zu trennen und Dinge zu verschieben.

Sehen Sie sich an, wie einfach es wäre, "doQuery3" als Voraussetzung für Ihre Berechnung hinzuzufügen!

Und unten die "package.json", die zum Beispielcode gehört:

{
    "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"
    }
}