Home > Enterprise >  Express app, multiple POST requests from the client side crashing page
Express app, multiple POST requests from the client side crashing page

Time:09-21

I have a to-do list app that updates a string in a mongodb database with every change in state of the to-do list - that string is parsed on reload to render the state. It works great, except when I trigger 5 or 6 state changes quickly in sequence, it hangs the page. As example, if I delete 5 tasks over the course of a couple seconds. I assume the problem is handling all those post requests, but maybe it's on the updating mongodb side? Is there a way to handle a lot of post request like that in a some sort of queue?

Client side:

function sendData(obj) {
  fetch('/jsondata', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(obj),
  }).catch(function (error) {
    console.log(error);
  });
  console.log('db updated');
}

Here's the mongo side that runs when the POST request is requested from client...if it helps:

app.post('/jsondata', function (req, res) {
  updateUserCache(currentUserEmail, JSON.stringify(req.body));
});

async function updateUserCache(email, newState) {
  const foundUser = await user.findOne({
    email: email,
  });
  foundUser.cachedState = newState;
  const newDate = await Date.now();
  foundUser.date = newDate;
  await foundUser.save();
  console.log('user cache has been updated');
}

CodePudding user response:

It's hanging because you're never sending back a response from your backend code, and at some point the browser will stop making new connections to it.

So make sure you end the requests properly:

app.post('/jsondata', async function (req, res) {
  await updateUserCache(currentUserEmail, JSON.stringify(req.body));
  res.end();
});
  • Related