POST-запрос, не удается установить заголовки после клиента, обновление базы данных и перенаправление

#node.js #http #post #header

#node.js #http #Публикация #заголовок

Вопрос:

Я пытаюсь обновить свою базу данных mongodb, а затем перенаправить пользователя обратно на страницу с формой.

Это обычная проблема «Невозможно установить заголовки после их отправки клиенту», которая часто публикуется здесь, но не смогла найти никакого решения для моей проблемы.

Я использую NodeJS и express, без php или jquery.

 const mongoose = require('mongoose');
var User = mongoose.model('user');

var createUser = function(req, res){
    console.log(req.body)
    var user = new User({
        "firstname": req.body.firstname,
        "surname": req.body.surname,
        "email": req.body.email,
        "age": req.body.age
    });
    user.save(function(err, newUser){
        if(!err){
            res.send(newUser);
        }
        else{
            res.sendStatus(400);
        }
    });
    res.redirect('/');
};

module.exports.createUser = createUser;
  

Я получаю сообщение об ошибке «Не удается установить заголовки после их отправки клиенту»

Он обновляет мою базу данных mongodb, но после сбоя сервера.

Не очень разбираюсь в заголовках запросов, буду признателен за любую помощь 🙂

Ответ №1:

Поскольку ваш запрос был успешно выполнен, if выполняется блок здесь, который отправляет некоторый ответ клиенту. Затем остальная часть выполнения продолжается до тех res.redirect('/') пор, пока он снова не попытается отправить какой-либо ответ (из того, что находится в / маршруте).

 user.save(function(err, newUser){
  if(!err){
    // Here >>
    res.send(newUser);
  }
  else{
    res.sendStatus(400);
  }
});
// and finally >>
res.redirect('/');
  

Так что либо делайте return res.send(newUser); , либо делайте перенаправление только в конце, а не оба