Monday, 5 June 2017

ExpressJS: Why does this output [] on the first GET, and then the next GET returns the data from the previous?

I am experimenting with Express and MongoDB, and have a functional API server that can add, update, delete, and retrieve a single post. The issue I have run into is returning all of the documents from Mongo.

I have a GET route that outputs the results, except it does not behave as I imagined it would. When you run this, the first GET request to /notes returns and empty array, i.e. []

let notes =[];
app.get('/notes', (req, res) => {
    async function getNotes() {
      try {
        await db.collection('notes').find().forEach(function (myDoc) {
          notes.push(myDoc);
        })
      } catch(err) {
        console.log(err)
      }
      console.log(notes);
      res.send((notes));
    }
    getNotes();
  });

On the second GET to /notes, however, the data that was pushed into notes[] is returned, and it is then overwritten by the newly pushed data.

Can anyone help me fill in the blank spot in my understanding of this? I imagine there is something that I just didn't understand along the way.



via davenull

No comments:

Post a Comment