提问者:小点点

从数据库服务器得到响应后,如何响应前端请求?


我正在尝试创建一个纯Node.js HTTP服务器来将我的AngularJS前端连接到Postgres数据库。但是我无法向前端发送有效的响应,因为在我可以从DB服务器响应之前,向前端发送响应。

我的后端服务器代码如下。

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

共1个答案

匿名用户

只需在回调本身中移动响应代码即可。因为您正在执行异步操作,所以服务器将在启动then回调之前做出响应。

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);
        res.writeHead(200, headers);
        res.write(JSON.stringify(menu));
        res.end();
        client.end().then(()=>{console.log("Database disconnected");});
     }).catch(e => console.error(e.stack));

}).listen(3500, ()=>{
    console.log("BackEnd Server online");
});

希望这有用!