从Vue组件向NodeJs服务器进行异步调用,然后等待应答

时间:2018-11-23 03:17:33

标签: node.js asynchronous vue.js

我要完成的工作是:我有一台运行Vue.js的服务器。在“ npm run dev”之后,该应用程序将显示在localhost:8080上。现在,在构建完所有内容之后,将执行组件中的以下代码: (我有一个运行在端口3000上的NodeJs服务器)

HelloWorld.Vue

mounted () {  
  axios.get('http://localhost:3000/')
    .then((response) => {
    console.log(response.data);
    this.User = response.data;
  })
  .catch((error) => {
    console.log(error);
  });  

}

基本上,这将要求NodeJS服务器对Post Gres数据库执行查询。

Server.Js

 app.get('/', function (req, res) {
    return res.send(connectBD());
});

function connectBD(){ 

    res =  client.query("Select * from entidademeio");

    res.rows.forEach(row=>{
        console.log(row);
        tmp = JSON.stringify(row['nomeentidade']) + "";
        queryResult += tmp;         //Imprime as rows da b
    });
    client.end();
    return queryResult;
}

但是我从Vue端收到此错误:

Request failed with status code 500
at createError (createError.js?16d0:16)
at settle (settle.js?db52:18)
at XMLHttpRequest.handleLoad (xhr.js?ec6c:77)

但是,如果我返回一个字符串:

Server.Js

app.get('/', function (req, res) {
     return res.send("bla");
});

它会像我想要的那样在Vue侧的控制台中显示。有人可以为我提供解决方案和一些代码片段。我希望查询结果从Vue Side显示在控制台上。谢谢

编辑:

如果我将ConnectBD()更改为:

async function connectBD(){ 
var conString = "postgres://**********************";
var client = new pg.Client(conString);
var result;
await client.connect();

res = await client.query("Select * from entidademeio");

res.rows.forEach(row=>{
    console.log(row);
    tmp = JSON.stringify(row['nomeentidade']) + "";
    result += tmp;         //Imprime as rows da b
});
await client.end();
console.log(result);
return result;

}

我从Vue端得到一个空数组,但是node的终端返回了正确的结果。

新编辑:空数组: The empty array on the console from Vue Side

0 个答案:

没有答案