Это происходит потому, что промежуточное программное обеспечение, createProductsWebHook()
, вызывается первым при получении запроса, который затем отправляет 200
ответ с кодом состояния, res.sendStatus(200)
. Затем в той же функции промежуточного программного обеспечения вызывается product.save().then(...)
. save()
Функция обратного вызова также пытается отправить ответ & ndash; после того, как один уже был отправлен тем же самым промежуточным ПО & ndash; используя res.json(saveProduct)
.
Ключ на вынос
Промежуточное программное обеспечение не должно отправлять ответ; это побеждает цель промежуточного программного обеспечения. Задача Middleware состоит в том, чтобы декорировать (добавлять или удалять информацию, то есть заголовки, асинхронно обновлять сеанс аутентификации, выполнять побочные эффекты и другие задачи) из запроса или ответа и передавать его, как цепочку ответственности, а не передавать его - ndash; это то, для чего нужен ваш обработчик маршрута (тот, с которым вы зарегистрировали свой HTTP-путь и метод, например, app.post(my_path, some_middleware, route_handler)
.