Make async call from Vue component to NodeJs server and wait for answer












1















What I'm trying to accomplish is this: I have a Server running Vue.js. After "npm run dev" the app is displayed on localhost:8080 . Now after everything is built, this piece of code in a component is executed:
(I have a NodeJs server running on port 3000)



HelloWorld.Vue



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


}



Which will basically ask the NodeJS Server to perform a query on a Post Gres database.



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;
}


But i get this error from the Vue side:




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)



However if i return a string :



Server.Js



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


it gets displayed like i wanted in the console on the Vue Side. Can somebody please provide me with a solution and some code snippets.I want the result of the query to be displayed on the console from Vue Side. Thanks



EDIT:



If I change my ConnectBD() to:



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;


}



I get an empty array from Vue side but the terminal from node is returning the correct result.



NEW EDIT: The empty array:
The empty array on the console from Vue Side










share|improve this question





























    1















    What I'm trying to accomplish is this: I have a Server running Vue.js. After "npm run dev" the app is displayed on localhost:8080 . Now after everything is built, this piece of code in a component is executed:
    (I have a NodeJs server running on port 3000)



    HelloWorld.Vue



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


    }



    Which will basically ask the NodeJS Server to perform a query on a Post Gres database.



    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;
    }


    But i get this error from the Vue side:




    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)



    However if i return a string :



    Server.Js



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


    it gets displayed like i wanted in the console on the Vue Side. Can somebody please provide me with a solution and some code snippets.I want the result of the query to be displayed on the console from Vue Side. Thanks



    EDIT:



    If I change my ConnectBD() to:



    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;


    }



    I get an empty array from Vue side but the terminal from node is returning the correct result.



    NEW EDIT: The empty array:
    The empty array on the console from Vue Side










    share|improve this question



























      1












      1








      1








      What I'm trying to accomplish is this: I have a Server running Vue.js. After "npm run dev" the app is displayed on localhost:8080 . Now after everything is built, this piece of code in a component is executed:
      (I have a NodeJs server running on port 3000)



      HelloWorld.Vue



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


      }



      Which will basically ask the NodeJS Server to perform a query on a Post Gres database.



      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;
      }


      But i get this error from the Vue side:




      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)



      However if i return a string :



      Server.Js



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


      it gets displayed like i wanted in the console on the Vue Side. Can somebody please provide me with a solution and some code snippets.I want the result of the query to be displayed on the console from Vue Side. Thanks



      EDIT:



      If I change my ConnectBD() to:



      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;


      }



      I get an empty array from Vue side but the terminal from node is returning the correct result.



      NEW EDIT: The empty array:
      The empty array on the console from Vue Side










      share|improve this question
















      What I'm trying to accomplish is this: I have a Server running Vue.js. After "npm run dev" the app is displayed on localhost:8080 . Now after everything is built, this piece of code in a component is executed:
      (I have a NodeJs server running on port 3000)



      HelloWorld.Vue



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


      }



      Which will basically ask the NodeJS Server to perform a query on a Post Gres database.



      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;
      }


      But i get this error from the Vue side:




      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)



      However if i return a string :



      Server.Js



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


      it gets displayed like i wanted in the console on the Vue Side. Can somebody please provide me with a solution and some code snippets.I want the result of the query to be displayed on the console from Vue Side. Thanks



      EDIT:



      If I change my ConnectBD() to:



      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;


      }



      I get an empty array from Vue side but the terminal from node is returning the correct result.



      NEW EDIT: The empty array:
      The empty array on the console from Vue Side







      node.js asynchronous vue.js






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 23 '18 at 4:40







      John Doe

















      asked Nov 23 '18 at 3:17









      John DoeJohn Doe

      144




      144
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440259%2fmake-async-call-from-vue-component-to-nodejs-server-and-wait-for-answer%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440259%2fmake-async-call-from-vue-component-to-nodejs-server-and-wait-for-answer%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Futebolista

          Feedback on college project

          Albești (Vaslui)