ตั้งใจอยากสร้างฟังก์ชั่นเพื่อส่ง sql statement มา แล้ว return กลับเป็น ข้อมูลที่คิวรี่ออกมา
เมื่อทำการ select เป็นครั้งที่ 2 (เรียกฟังก์ชั่นนั้นครั้งที่สอง) จะขึ้น error Error: Client has already been connected. You cannot reuse a client.
ทั้งๆที่ในคำสั่ง มี client.end เรียบร้อยแล้ว
- ผลจาก Query แรกออกมาเรียบร้อยแล้ว / Query ครั้งแรกไม่มีปัญหา
- ไม่ว่าจะ Set timeout นานขนาดไหนก้ยัง Error ต้องทำการปิด script ก่อนจึงค่อยรันใหม่อีกครั้งได้แค่ 1 query เท่านั้น พอเป็น query ที่สอง
Code เป็นดังนี้
- ผู้ให้บริการรายนี้ไม่อนุญาตให้ใช้ Pool
ใส่โค้ด
const { promises } = require('dns');
const fs = require('fs');
const pg = require('pg');
const url = require('url');
module.exports.pg=pg
const config = {
statement_timeout: 100,
user: "avnadmin",
password: "AVN*******2f",
host: "p*****ncloud.com",
port: 26239,
database: "****et",
ssl: {
rejectUnauthorized: true,
ca: `-----BEGIN CERTIFICATE-----
MIIE*****QYJKoZIhvc****************************************NAQEM
BQAwOjE4MDYGA1UEAwwvY2E5ZWFmZGQtOTcwMC00MTYxLTg4MTktODA2N2MwNGVj
MzM4I****MDI1MTExNTI0WhcNMzQ*******************xMDIzMTExNTI0WjA6
MTgwNgYDVQQDDC9jYTllYWZkZC05NzAwLTQxNjEtODgxOS04MDY3YzA0ZWMzMzgg
UHJvamVjdCBDQTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMwVsEhH
BzTNo9xnP3xye+b5Z/qm1MyNag4A6UWN32mAWk65h3RnEAnHVAFESIYSpU8SI0vz
S3nd9r4LQv38A548CJ+Qwk3rn7LqeEZkyuk5FseYOzcxJo1GSSw+as9tJvqz2wlM
ZPyC7nJQ+hOONnXedLmkR7HP6BfWYrRtZmiNSdZdts3ATCGhbjjJ5EuDRIKbn3bl
fBrypfF3l*****kyjH0Q8m2REr*****************vrIZoRWB7aZ3wV3LmCF6h
+ZL/lGUK994sy2MSqTvAkwhTkCWGmc9+b7QiPJXNuLUROKfUWLPlxmZ7IQosy4iC
v08pP5Z****59wFI0Nl5pe************************PC2uuPHSLuYV8IoQHO
M4psa7+b***********************YXa+******+hfJT/mysGn2jBVEclLPymH
FHlFJZJe79una58SgRjiljNTwm5YqUy5c5V0vSqSBIzGSh2tayhrZobz4QIDAQAB
oz8wPTAdBg***************************NVHQ4EFgQ****YDVR0TBAgwBgEB
/wIBADALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQEMBQADggGBALyqwToDd3uqhTBA
zosuGMj***fa5vYAn0K9*******************X/iW57vaHk2kO7Ef1Pqso+wFY
wMktBTb/dB7yHskTyNeocpGt7A/5MtDRIYyUu/tb04P5rAKLYRcAm4UZheyAwxrE
+89FhAueaJzHaFsMN****************lv3W0m***y+cIMDAWyd/6BxZXVRCst+
DPX0mONrZ9WB/mZL0s6v4ZoRBTdGeSUl/oMmhmbJMp4V540eev9y+1jIFjdcCua7
385ss+zQM7VR***03JEBqDP****************************/j5s1RaT9SMcHL
ifgmV***YrZK40uhgSH*******************H4k92UyEqhTZmOSKO4XBQb1cPN
Sh5rXnCNep1Tw62K0n************************H+OwfNRfaUWERVjvZtNA==
-----END CERTIFICATE-----`,
},
};
module.exports.config=config
const clien=new pg.Client(config);
function connecting(){
return new Promise((resolve,reject)=>{
clien.connect(function(ConErr){
if(ConErr){
reject("Inside connecting Error When connect : "+ConErr)
}else{
//console.log("Inside connecting Successs When connect")
resolve("Inside connecting Successs When connect")
}
})
})
}
function quering(SqlState,data){
return QueryPromis = new Promise((resolve,reject)=>{
clien.query(SqlState,data,(QuryErr,result)=>{
if(QuryErr){
reject("Inside quering Error When Query : "+QuryErr)
}else{
console.log("Inside quering Success When Query")
resolve(result.rows)
}
})
})
}
function closing(){
return ClosePromisr = new Promise((resolve,reject)=>{
clien.end((CloseErr)=>{
if(CloseErr){
reject("Inside closing Error When Query : "+CloseErr)
}else{
//console.log("Inside closing Success When Query")
resolve("Inside closing Success When Query")
}
})
})
}
async function SelectDB(sql,params){
try{
console.log("in SelectDB"+await connecting())
const data = await quering(sql,params)
console.log(data)
console.log("in SelectDB"+await closing())
}catch(err){
console.log(err)
}
}
/////////////////////////------------------- Call function ------------
SelectDB(`SELECT * FROM public."Brand";`,)
setTimeout(() => {
SelectDB(`SELECT * FROM public."DocNumber";`,)
}, 3000);
Node.JS And PostgresDB : Error: Client has already been connected. You cannot reuse a client.
เมื่อทำการ select เป็นครั้งที่ 2 (เรียกฟังก์ชั่นนั้นครั้งที่สอง) จะขึ้น error Error: Client has already been connected. You cannot reuse a client.
ทั้งๆที่ในคำสั่ง มี client.end เรียบร้อยแล้ว
- ผลจาก Query แรกออกมาเรียบร้อยแล้ว / Query ครั้งแรกไม่มีปัญหา
- ไม่ว่าจะ Set timeout นานขนาดไหนก้ยัง Error ต้องทำการปิด script ก่อนจึงค่อยรันใหม่อีกครั้งได้แค่ 1 query เท่านั้น พอเป็น query ที่สอง
Code เป็นดังนี้
- ผู้ให้บริการรายนี้ไม่อนุญาตให้ใช้ Pool
const { promises } = require('dns');
const fs = require('fs');
const pg = require('pg');
const url = require('url');
module.exports.pg=pg
const config = {
statement_timeout: 100,
user: "avnadmin",
password: "AVN*******2f",
host: "p*****ncloud.com",
port: 26239,
database: "****et",
ssl: {
rejectUnauthorized: true,
ca: `-----BEGIN CERTIFICATE-----
MIIE*****QYJKoZIhvc****************************************NAQEM
BQAwOjE4MDYGA1UEAwwvY2E5ZWFmZGQtOTcwMC00MTYxLTg4MTktODA2N2MwNGVj
MzM4I****MDI1MTExNTI0WhcNMzQ*******************xMDIzMTExNTI0WjA6
MTgwNgYDVQQDDC9jYTllYWZkZC05NzAwLTQxNjEtODgxOS04MDY3YzA0ZWMzMzgg
UHJvamVjdCBDQTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMwVsEhH
BzTNo9xnP3xye+b5Z/qm1MyNag4A6UWN32mAWk65h3RnEAnHVAFESIYSpU8SI0vz
S3nd9r4LQv38A548CJ+Qwk3rn7LqeEZkyuk5FseYOzcxJo1GSSw+as9tJvqz2wlM
ZPyC7nJQ+hOONnXedLmkR7HP6BfWYrRtZmiNSdZdts3ATCGhbjjJ5EuDRIKbn3bl
fBrypfF3l*****kyjH0Q8m2REr*****************vrIZoRWB7aZ3wV3LmCF6h
+ZL/lGUK994sy2MSqTvAkwhTkCWGmc9+b7QiPJXNuLUROKfUWLPlxmZ7IQosy4iC
v08pP5Z****59wFI0Nl5pe************************PC2uuPHSLuYV8IoQHO
M4psa7+b***********************YXa+******+hfJT/mysGn2jBVEclLPymH
FHlFJZJe79una58SgRjiljNTwm5YqUy5c5V0vSqSBIzGSh2tayhrZobz4QIDAQAB
oz8wPTAdBg***************************NVHQ4EFgQ****YDVR0TBAgwBgEB
/wIBADALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQEMBQADggGBALyqwToDd3uqhTBA
zosuGMj***fa5vYAn0K9*******************X/iW57vaHk2kO7Ef1Pqso+wFY
wMktBTb/dB7yHskTyNeocpGt7A/5MtDRIYyUu/tb04P5rAKLYRcAm4UZheyAwxrE
+89FhAueaJzHaFsMN****************lv3W0m***y+cIMDAWyd/6BxZXVRCst+
DPX0mONrZ9WB/mZL0s6v4ZoRBTdGeSUl/oMmhmbJMp4V540eev9y+1jIFjdcCua7
385ss+zQM7VR***03JEBqDP****************************/j5s1RaT9SMcHL
ifgmV***YrZK40uhgSH*******************H4k92UyEqhTZmOSKO4XBQb1cPN
Sh5rXnCNep1Tw62K0n************************H+OwfNRfaUWERVjvZtNA==
-----END CERTIFICATE-----`,
},
};
module.exports.config=config
const clien=new pg.Client(config);
function connecting(){
return new Promise((resolve,reject)=>{
clien.connect(function(ConErr){
if(ConErr){
reject("Inside connecting Error When connect : "+ConErr)
}else{
//console.log("Inside connecting Successs When connect")
resolve("Inside connecting Successs When connect")
}
})
})
}
function quering(SqlState,data){
return QueryPromis = new Promise((resolve,reject)=>{
clien.query(SqlState,data,(QuryErr,result)=>{
if(QuryErr){
reject("Inside quering Error When Query : "+QuryErr)
}else{
console.log("Inside quering Success When Query")
resolve(result.rows)
}
})
})
}
function closing(){
return ClosePromisr = new Promise((resolve,reject)=>{
clien.end((CloseErr)=>{
if(CloseErr){
reject("Inside closing Error When Query : "+CloseErr)
}else{
//console.log("Inside closing Success When Query")
resolve("Inside closing Success When Query")
}
})
})
}
async function SelectDB(sql,params){
try{
console.log("in SelectDB"+await connecting())
const data = await quering(sql,params)
console.log(data)
console.log("in SelectDB"+await closing())
}catch(err){
console.log(err)
}
}
/////////////////////////------------------- Call function ------------
SelectDB(`SELECT * FROM public."Brand";`,)
setTimeout(() => {
SelectDB(`SELECT * FROM public."DocNumber";`,)
}, 3000);