【问题标题】:How to i fetch value of client.query in Node JS with PG?如何使用 PG 在 Node JS 中获取 client.query 的值?
【发布时间】:2017-06-16 14:23:57
【问题描述】:

我正在使用 node.js 并与 postgresql 建立数据库连接。 我的 dbConfig.js 看起来像:-

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;

我的 api.js 文件看起来像:-

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;

我的 api.js 看起来像:-

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

我希望将 client.query 中的 res 放入 result 变量中。我在mysqljs issue 上发现了一个同样的问题,但我仍然无法解决这个疑问。

【问题讨论】:

  • 你收到什么回复?
  • 我什么也没收到。 @Zeokav
  • 为什么有人对这个问题投了反对票?我只是在问我的疑问。是否有效?
  • 你不讨厌人们在没有批评的情况下投反对票吗?对于不了解节点异步性质的人来说,这是一个有效的问题。
  • 谢谢兄弟@Zeokav

标签: javascript node.js postgresql express pg


【解决方案1】:

我们需要回调完成才能返回响应,解决这个问题的方法之一是使用promises,如下所示:

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;

在您的api.js 中更改为:

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

【讨论】:

  • 什么是承诺?喜欢用途和所有? @nash_ag
  • 它给了我一个错误,因为 TypeError: Cannot read property 'then' of undefined.
  • 啊 - 修复答案。
  • @DhiralKaniya 以下是有关承诺的更多详细信息 - strongloop.com/strongblog/…
  • 我的错误。抱歉上面..但是是否可以在 web.js 中的某个变量中获取 res 值,例如 var result = apiCheck.checkAPI(value)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 2022-01-06
相关资源
最近更新 更多