Ошибка: невозможно установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 31 марта 2020

Когда я попадаю на маршрут регистрации, «req.body» не выбирает ни одно из значений POST, однако всякий раз, когда тот же код тестируется в Postman - методом body raw - отображаются значения.

const router = require('express').Router();
const bodyParser = require('body-parser');
const Promise = require('bluebird');

router.use(bodyParser.json());
router.use(bodyParser.urlencoded({
  extended: true
}));


const registration = require('./services/registration');

router.get('/', (req, res, next) => {
  res.send('Admin Welcome');
});

router.get('/signup', (req, res, next) => {
  res.render('user/signup');
});

router.post('/signup', (req, res, next) => {
  res.send(req.body);
  registration.registration(req.body);
  .then(ok=>{
    res.redirect('signin')
  })
  .catch(err => {
    res.render('error', {message: err})
  })
})

router.get('/signin', (req, res, next) => {
  res.render('user/signin');
});

оригинальный код

1 Ответ

0 голосов
/ 31 марта 2020
router.post("/signup", (req, res, next) => {
  res.send(req.body);
  registration
    .registration(req.body)
    .then(ok => {
      res.redirect("signin");
    })
    .catch(err => {
      res.render("error", { message: err });
    });
});

Объект res представляет ответ HTTP, который приложение Express отправляет, когда оно получает запрос HTTP. В следующей ссылке вы можете увидеть все методы, доступные для объекта res: https://expressjs.com/en/api.html#res

Метод, который вы используете в начале вашего обработчика маршрута:

res.send ([body])

И, как видно из документации, он отправляет HTTP-ответ. Теперь вы можете отправить этот ответ только один раз, в противном случае вы получите сообщение об ошибке:

Error : Cannot set headers after they are sent to the client

И что вы пытаетесь сделать в обработчике, это перенаправить результат на страницу «входа», после которой уже отправляете ответ с res.send(req.body).

Возьмите этот поддельный маршрут для примера:

router.post("/example", (req, res, next) => {
  res.send('1');
  res.send('2');
  res.send('3');
});

Вопреки тому, что вы могли бы поверить, он не вернет значения (1,2,3), но фактически вернет значение 1 и повышение и ошибка, которая была ранее описана.

Наконец, чтобы решить вашу проблему, вам нужно удалить строку, содержащую res.send(req.body), и дважды проверить, правильно ли обрабатывает registration.registration служба предоставленных данных, в данном случае req.body .

...