node- postgres возвращает неопределенный результат - PullRequest
0 голосов
/ 14 июля 2020

Когда я пытаюсь получить результат от node- postgres из моего express приложения, 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();
        });
    }
}

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

Ответы [ 3 ]

1 голос
/ 14 июля 2020

нужно получить подключение к пулу

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)
  })
})
1 голос
/ 14 июля 2020

кажется, что отправленный параметр запроса находится в формате mysql, используйте формат node- postgres, который равен var sql = "select id from users where id = $1";, который должен возвращать действительный результат

1 голос
/ 14 июля 2020

Кажется, что вы используете params неправильно.

Вы передаете массив в db.getResult(), а затем используете его как первый элемент другого массива.

В этой строке должно быть просто pool.query(sql, params, (error, results)=>{.

...