如何仅在从我的数据库服务器获得预期响应后才响应前端请求?
How can I respond to the frond-end request only after getting expected response from my database server?
我正在尝试创建一个纯 Node.js HTTP 服务器来将我的 AngularJS 前端连接到 Postgres 数据库。但是我无法向前端发送有效响应,因为在我可以从数据库服务器响应之前发送了对前端的响应。
我的后端服务器代码如下。
const http = require('http');
const pg = require('pg');
let menu = [];
const headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
'Access-Control-Max-Age': 2592000,
'Content-Type':'application/JSON',
};
http.createServer((req, res) =>{
client.connect();
client.query('select * from menu;')
.then(res => {
for(row of res.rows) {
let obj = {
'name': row.name,
'price': row.price,
};
menu.push(obj);
}
console.log(menu);
client.end().then(()=>{console.log("Database disconnected");});
}).catch(e => console.error(e.stack));
console.log(menu);
res.writeHead(200, headers);
res.write(JSON.stringify(menu));
res.end();
}).listen(3500, ()=>{
console.log("BackEnd Server online");
});
后端的控制台日志如下。请给我一个可能的修复建议。
BackEnd Server online
[]
[
{ name: 'Panner Butter Masala', price: 130 },
{ name: 'Dosa', price: 80 },
{ name: 'Roti', price: 40 },
{ name: 'Pulka', price: 30 },
{ name: 'Sambar vada', price: 70 }
]
Database disconnected
如您所见,在我从我的数据库获得响应之前,对我的前端的响应已经发送。所以,我无法获取请求的数据。
使用async/await等待响应然后发送给客户端
const http = require('http');
const pg = require('pg');
let menu = [];
const headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
'Access-Control-Max-Age': 2592000,
'Content-Type':'application/JSON',
};
http.createServer(async (req, res) =>{
client.connect();
try {
const res = await client.query('select * from menu;');
for(row of res.rows) {
let obj = {
'name': row.name,
'price': row.price,
};
menu.push(obj);
}
} catch (e) {
console.error(e.stack);
}
await client.end();
console.log("Database disconnected")
res.writeHead(200, headers);
res.write(JSON.stringify(menu));
res.end();
}).listen(3500, ()=>{
console.log("BackEnd Server online");
});
我正在尝试创建一个纯 Node.js HTTP 服务器来将我的 AngularJS 前端连接到 Postgres 数据库。但是我无法向前端发送有效响应,因为在我可以从数据库服务器响应之前发送了对前端的响应。
我的后端服务器代码如下。
const http = require('http');
const pg = require('pg');
let menu = [];
const headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
'Access-Control-Max-Age': 2592000,
'Content-Type':'application/JSON',
};
http.createServer((req, res) =>{
client.connect();
client.query('select * from menu;')
.then(res => {
for(row of res.rows) {
let obj = {
'name': row.name,
'price': row.price,
};
menu.push(obj);
}
console.log(menu);
client.end().then(()=>{console.log("Database disconnected");});
}).catch(e => console.error(e.stack));
console.log(menu);
res.writeHead(200, headers);
res.write(JSON.stringify(menu));
res.end();
}).listen(3500, ()=>{
console.log("BackEnd Server online");
});
后端的控制台日志如下。请给我一个可能的修复建议。
BackEnd Server online
[]
[
{ name: 'Panner Butter Masala', price: 130 },
{ name: 'Dosa', price: 80 },
{ name: 'Roti', price: 40 },
{ name: 'Pulka', price: 30 },
{ name: 'Sambar vada', price: 70 }
]
Database disconnected
如您所见,在我从我的数据库获得响应之前,对我的前端的响应已经发送。所以,我无法获取请求的数据。
使用async/await等待响应然后发送给客户端
const http = require('http');
const pg = require('pg');
let menu = [];
const headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
'Access-Control-Max-Age': 2592000,
'Content-Type':'application/JSON',
};
http.createServer(async (req, res) =>{
client.connect();
try {
const res = await client.query('select * from menu;');
for(row of res.rows) {
let obj = {
'name': row.name,
'price': row.price,
};
menu.push(obj);
}
} catch (e) {
console.error(e.stack);
}
await client.end();
console.log("Database disconnected")
res.writeHead(200, headers);
res.write(JSON.stringify(menu));
res.end();
}).listen(3500, ()=>{
console.log("BackEnd Server online");
});