【问题标题】:node-postgres returning undefined resultnode-postgres 返回未定义的结果
【发布时间】:2020-07-14 11:25:42
【问题描述】:

当我尝试从我的 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();
        });
    }
}

用户模型.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);
                }
            });
        });
    }
}

【问题讨论】:

    标签: node.js postgresql express node-postgres


    【解决方案1】:

    发送的查询参数好像是mysql格式,使用node-postgres格式var sql = "select id from users where id = $1";应该返回有效结果

    【讨论】:

      【解决方案2】:

      您对params 的使用似乎不正确。

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

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

      【讨论】:

        【解决方案3】:

        你需要获得池连接

        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"= $1';
          findUserById(sql, 1)
          .then(result => {
            res.status(200).send({
              data: result
            })
          })
          .catch(error => {
            res.status(400).send(error)
          })
        })

        【讨论】:

          猜你喜欢
          • 2020-02-03
          • 2013-06-30
          • 2018-07-11
          • 1970-01-01
          • 1970-01-01
          • 2019-01-25
          • 1970-01-01
          • 2015-05-09
          • 2017-08-25
          相关资源
          最近更新 更多