在下面的 NodeJS API 中,PostgreSQL 数据库插入了多行,然后需要发送一个响应主体。由于有多种情况可能会出现错误,因此我需要使用消息代码设置响应正文,以帮助识别可能的原因。因此,我使用了一个 resp
对象,它将保存消息代码的 code
键。此对象将在状态为 200
(成功)或 500
(错误)的 HTTP 响应中发送。
但是,我一直收到一个空的响应正文。变量作用域可以吗?
router.post('/', function (req, res, next) {
rdbmsPool.connect((err, client, release) => {
if (err) {
var resp = {
'Request-Id' : req.get('X-Request-Id'),
'code' : 'code'
}
res.status(500)
res.send(resp)
} else {
var resp = {}
for (k in someArray) {
client.query(queryString, colValues, (err, result) => {
if (err) {
resp = {
'Request-Id' : req.get('X-Request-Id'),
'code' : 'code'
}
res.status(500)
} else {
resp = {
'Request-Id' : req.get('X-Request-Id'),
'code' : 'code'
}
res.status(200)
}
})
}
for (k in someOtherArray) {
client.query(queryString, colValues, (err, result) => {
if (err) {
resp = {
'Request-Id' : req.get('X-Request-Id'),
'code' : 'code'
}
res.status(500)
} else {
resp = {
'Request-Id' : req.get('X-Request-Id'),
'code' : 'code'
}
res.status(200)
}
})
}
release()
res.send(resp)
}
})
});
最佳答案
尝试这样的事情
let array1 = [];
for(k in someArray){
array1.push(client.query(queryString, colValues));
}
let array2 = [];
for (k in someOtherArray) {
array2.push(client.query(queryString, colValues));
}
try{
const results1 = await Promise.all(array1);
const results2 = await Promise.all(array2);
// if it comes here queries are successful
}
catch(error){
//send 500 here. any query have failed
console.log(error);
}
关于node.js - expressjs - 未设置响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52799971/