inControl
inControl

Reputation: 2344

SELECT not working in node.js

I'm trying to use a SELECT query on my SQL database using node.js, the SELECT query below should work but doesn't. This is weird because I think this should work but it doesn't even enter the client.query function. I also copied my INSERT query which is actually working to show you my connection to the database works fine.

What am I doing wrong in the SELECT query?

CreateConnection

var mysql = require('mysql');
var client = mysql.createConnection({
    host: '***',
    user: '***',
    password: '***',
    database: '***'
});

SELECT Query (Not working)

    function query(sql){
      var returnvalue = "tempVal";
      client.connect();
      client.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
        returnvalue = "doens't even enter function";
        if (err) throw err;

        returnvalue = rows[0].solution;
      });
      client.end();    
      return returnvalue;
    }

INSERT Query (Is working)

function query(sql){
  client.connect();
  client.query('INSERT INTO users (username) VALUES("foo")');
  client.end();
}

Upvotes: 1

Views: 2568

Answers (1)

Jonathan Lonowski
Jonathan Lonowski

Reputation: 123533

As .query() is an asynchronous method, you won't be able to return the value as the callback will be called after the return is evaluated.

You'll have to continue the callback pattern:

function query(sql, callback) {
    client.connect();
    client.query(sql, function (err, rows, fields) {
        if (err) {
            callback(err);
        else
            callback(null, rows, fields);
    });

    client.end();
}

Correction: Seems client.end() will allow current queries to finish before the connection actually closes.

Closing the connection is done using end() which makes sure all remaining queries are executed before sending a quit packet to the mysql server.

Though, calling .end() inside the callback is commonplace for many APIs as they will cut-off any pending actions.

Upvotes: 1

Related Questions