从Node.js中的异步查询获取结果

时间:2019-08-21 14:40:16

标签: javascript node.js postgresql asynchronous

我正在从数据库中提取一些数据,以便在我的nodejs应用程序中使用它。 我正在使用node-postgres连接到数据库(https://node-postgres.com/)。

我多次浏览了指南,并尝试以不同的方式(回调,承诺,使用池和客户端)对其进行查询,但是总是会出错。

const { Pool } = require('pg');

const pool = new Pool({
  user: 'user',
  host: 'host',
  database: 'db',
  password: 'pass',
  port: port,
});

pool.query('SELECT * from table').then(res=> {
var projects = res.rows; 
console.log(projects); 
return projects;
});

//... few other operations on projects data to follow before exports

exports.raw = projects;

我可以在控制台输出中看到数据,因此连接正常,但是当我尝试运行代码时,我得到了

ReferenceError: projects is not defined.

对此表示感谢。

3 个答案:

答案 0 :(得分:0)

您可以简单地通过async/await代码格式实现

users.js

const users = {};

const { Pool } = require('pg');

const pool = new Pool({
  user: 'user',
  host: 'host',
  database: 'db',
  password: 'pass',
  port: process.env.port,
});

users.getUsers = async () => {
  try {
    const result = await pool.query('SELECT * FROM users');
    console.log(result);
    return result;
  } catch (err) {
    console.error(err);
    throw err;
  }
};

module.exports = users;

friends.js

const friends = {};

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

friends.getSampleData = async () => {
  try {
    const result = await users.getUsers();
    console.log(result);
    return result;
  } catch (err) {
    console.error(err);
    throw err;
  }
};

module.exports = friends;
  

注意 async/await仅对返回Promise的函数起作用。

答案 1 :(得分:0)

就像杰里米(Jeremy)回答的那样,创建一个getter方法以获取数据,不要在需要之前先存储它。

const fetchData = async() => {
  const res = await pool.query('SELECT * from table')
  return res.rows;
}

const myDesiredData = fetchData()

答案 2 :(得分:-1)

尝试使用async/await语法:

let projects;

(async () => {
    const res = await pool.query('SELECT * from table');
    projects = res.rows;
})();

exports.raw = projects;