我正在从数据库中提取一些数据,以便在我的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.
对此表示感谢。
答案 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;