Search code examples
javascriptnode.jspostgresqlexpresspg

How to i fetch value of client.query in Node JS with PG?


I am using node.js and make database connection with postgresql. My dbConfig.js look like :-

var pg = require('pg');
var client  = new pg.Client({
    host:'myhoost',
    port:'5432',
    user:'myuser',
    password:'mypass',
    database:'mydb',
    ssl:true
});
client.connect();
module.exports.myconnection = client;

my api.js file look like :-

var dbConnect = require('./dbConfig.js');
var client = dbConnect.myconnection;
var ser = function(value) {
    var query = "SELECT * FROM tbl_api WHERE apikey = '" + value + "'";

    client.query(query, function(err, result) {
        var res = true;
        if (err) {
            var res = false;
        } else {
            if (result.rowCount > 0) {
                res = true;
            } else {
                res = false;
            }
        }
       return res;
    });
};
module.exports.checkAPI = ser;

my api.js look like:-

var express = require('express');
var app = express();
var apiCheck = require('./api.js');


//APIKey Generator check api
app.get('/apicheck/:apikey', function(request, response) {
    var value = request.params.apikey;
    var result = apiCheck.checkAPI(value);
    response.send(result);
});

i want the res from client.query into the result variable. I found one same issue with mysqljs issue but still i am not able to solve this doubt.


Solution

  • We need the callback to finish to return a response, one of the way to solve this is using promises as shown below:

    var ser = function(value) {
        var query = "SELECT * FROM tbl_api WHERE apikey = '" + value + "'";
        return new Promise(function (resolve, reject) {
           client.query(query, function(err, result) {         
               if (err) {
                  return reject(err);
               } else {
                  if (result.rowCount > 0) {
                      return resolve(true);
                  } 
               }
               return resolve(false);
           });
       });
    };
    module.exports.checkAPI = ser;
    

    And in your api.js changes to:

    var express = require('express');
    var app = express();
    var apiCheck = require('./api.js');
    
    
    //APIKey Generator check api
    app.get('/apicheck/:apikey', function(request, response) {
        var value = request.params.apikey;
        apiCheck.checkAPI(value)
          .then(function(result) { response.send(result); })
          .catch(function(err) { response.send(err); });
    });