node-postgres 返回未定义的结果

node-postgres returning undefined result

当我尝试从我的 express 应用程序中获取来自 node-postgres 的结果时,pool.query 在我将其登录到控制台时返回未定义的结果。不确定是关于数据库连接正确还是我没有正确返回结果?我正在使用 heroku 部署应用程序并使用 heroku 提供的连接字符串。想不通,有没有人帮忙?

db.js:

const { Pool } = require('pg');
const conString = process.env.DATABASE_URL;
const pool = new Pool({
    connectionString: conString,
        ssl: {rejectUnauthorized: false}
});
module.exports ={
    getResult: (sql, params, callback)=>{
        pool.query(sql, [params], (error, results)=>{
            console.log(results);
            if(!error){
                callback(results);
            }else{
                callback(null);
            }
            pool.end();
        });
    }
}

用户-model.js

var db = require('./db');

module.exports ={
    findUserById: (userId)=>{
        return new Promise((resolve, reject)=>{
            var sql = "select id from users where id=?";
            db.getResult(sql, [userId], (result)=>{
                if(result.length>0){
                    resolve(true);
                }else{
                    resolve(false);
                }
            });
        });
    }
}

看来你对params的使用不正确。

您正在将一个数组传递给 db.getResult(),然后将其用作另一个数组的第一个元素。

应该只是 pool.query(sql, params, (error, results)=>{ 在那一行。

您需要获取池连接

const pool = require('./pool');

module.exports = {
  // my version
  findUserById(sql, params) {
    return new Promise((resolve, reject) => {
      return pool
        .connect()
        .then(conn => {
          conn
            .query(sql, [params])
            .then(result => {
              conn.release()
              resolve(result)
            })
            .catch(error => {
              conn.release()
              reject(error)
            })
        })
    })
  },
  
  // your version
  findUserByIds: (userId) => {
    return new Promise((resolve, reject) => {
      var sql = "select id from users where id=?";
      db.getResult(sql, [userId], (result) => {
        if (result.length > 0) {
          resolve(true);
        } else {
          resolve(false);
        }
      });
    });
  }
}

//// in you main or you controller file
   // use the function
const { findUserById } = require('./model')

app.get('/user/:id', (req, res) => {
  let sql = 'select * from "users" where "userId"= ';
  findUserById(sql, 1)
  .then(result => {
    res.status(200).send({
      data: result
    })
  })
  .catch(error => {
    res.status(400).send(error)
  })
})

似乎发送的查询参数是 mysql 格式,使用 node-postgres 格式 var sql = "select id from users where id = "; 应该 return 有效结果