sql >> Database >  >> RDS >> Mysql

Aanpak van meerdere MySQL-query's met Node.js

Men moet de onheilspiramide vermijden:

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

Dit voorbeeld toont een resultaat dat afhankelijk is van 2 onafhankelijke berekende waarden. Elk van deze waarden wordt opgevraagd in doQuery1 en doQuery2. Ze worden in volgorde uitgevoerd, maar asynchroon.

Vervolgens zie je Q.all(... die in feite de "toen" callback op succes noemen. Binnen dat terugbellen wordt de berekening gedaan.

Beloften gebruiken (details:Github Q:belofte voor Javascript en wikipedia ) toestaan ​​om uw code schoner te maken, de berekening en verwerking van resultaten te scheiden en dingen te verplaatsen.

Kijk hoe gemakkelijk het zou zijn om "doQuery3" toe te voegen als voorwaarde voor uw berekening!

En blaas de "package.json" die bij de voorbeeldcode hoort:

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


  1. Kun je alles SELECTEREN, behalve 1 of 2 velden, zonder schrijverskramp?

  2. Recursie gebruiken om navigatie te bouwen

  3. Een MySQL/MariaDB-database exporteren

  4. Bij gebruik van Entity Framework met MySQL worden Unicode-tekens vervangen door basistekens