node.js + MySQL & amp; JSON-result - Problème de rappel & amp; pas de réponse au client

Je voudrais utiliser node.js pour interroger une base de données mySQL-base de données et renvoie les résultats sous forme de JSON pour être utilisé dans une application mobile. Malheureusement, ma demande juste sorta fois et le serveur ne fait rien pour un bon 2 minutes jusqu'à ce que les fichiers log montrer mon console.log()-états.

Aussi, le rappel ne retourne rien comme résultat. C'est tout simplement vide.

//Check dependencies
var http = require('http');
//Create the http server.
//reference: http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/
http.createServer(function(request, response) {
    //Attach listener on end event.
    request.on('close', function() {
        console.log('request');

        //run asynchronous 
        getSQL(function(err, result) {
            console.log('json:', result);
            response.writeHead(200, {
                'Content-Type' : 'x-application/json'
            });
            //Send data as JSON string.
            response.end(result);
        });
    });
}).listen(3000);

//Access MySQL via node-mysql
//https://github.com/felixge/node-mysql
function getSQL(callback) {
    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host : 'localhost',
        user : 'user',
        password : 'pw',
        database : 'db',
        socketPath : '/var/run/mysqld/mysqld.sock', //socket for communication from debian <-> client, seems not to be set correcly by default?
    });

    connection.connect();
    var json = '';
    var query = 'SELECT * FROM test';
    connection.query(query, function(err, results, fields) {
        if (err)
            return callback(err, null);

        console.log('The result is: ', results[0]);

        //wrap result-set as json
        json = JSON.stringify(results);
    });
    connection.end();

    callback(null, json);
};

Sortie après 2 minutes:

$ node app.js
request
json:
The result is:  { test: 'avc' }
json2: [{"test":"avc"}]

Basé sur ma connaissance de base de l'ensemble de nœud.js-concept, mon code doit interroger la bd (il le fait), et un retour json une fois qu'il est terminé par le rappel de la fonction (apparemment ne fait pas) qui est envoyé à l'arrière comme une réponse au client (ne peut pas vraiment vérifier que, depuis le json est vide).

Je suppose que j'en ai fait une ou plusieurs erreurs majeures. Aide et/ou liens utiles serait très apprécié. Merci!

Solution, grâce à hexacyanide

//Check dependencies
var http = require('http');
//Create the http server.
//reference: http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/

/***************
* Correction 1: Using the request.on('close', function()( ... )-listener isn't required anymore
***************/
http.createServer(function(req, res) {
    console.log('Receving request...');
    var callback = function(err, result) {
        res.writeHead(200, {
            'Content-Type' : 'x-application/json'
        });
        console.log('json:', result);
        res.end(result);
    };

    getSQL(callback);

}).listen(3000);

//Access MySQL via node-mysql
//https://github.com/felixge/node-mysql
function getSQL(callback) {
    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host : 'localhost',
        user : 'user',
        password : 'pw',
        database : 'db',
        socketPath : '/var/run/mysqld/mysqld.sock', //socket for communication from debian <-> client, seems not to be set correcly by default?
    });

    connection.connect();
    var json = '';
    var query = 'SELECT * FROM test';
    connection.query(query, function(err, results, fields) {
        if (err)
            return callback(err, null);

        console.log('The query-result is: ', results[0]);

        //wrap result-set as json
        json = JSON.stringify(results);

        /***************
        * Correction 2: Nest the callback correctly!
        ***************/
        connection.end();
        console.log('JSON-result:', json);
        callback(null, json);
    });
};

source d'informationauteur otter-in-a-suit