Cannot set headers after they are sent to the client

Hello, I’m getting this error
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
when I’m hitting my POST login route. Here is my code:

router.post('/login', async (req, res) => {
  const { username, password } = req.body;

  req.session.username = username;

  try {
    const user = await User.findOne({ username });

    if (!user) {
      return res.status(400).send('No user');
    }

    if ((user.password = password)) {
      return res.redirect('/homepage');
    }

    res.redirect('/');
  } catch (error) {
    console.error(error);
  }
});

instead of putting res.redirect('/'); at the bottom do like this

router.post('/login', async (req, res) => {
  const { username, password } = req.body;

  req.session.username = username;

  try {
    const user = await User.findOne({ username });

    if (!user) {
      return res.status(400).send('No user');
    } else if ((user.password = password)) {
      return res.redirect('/homepage');
    } else {
      res.redirect('/');
}
  } catch (error) {
    console.error(error);
  }
});
1 Like