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 有效结果
当我尝试从我的 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 有效结果