Ошибка: не удается установить заголовки после их отправки из-за рез.? - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь настроить метод, который вызывается через webhook Shopify.Я получаю данные и могу сохранить их на новом сервере, но в консоли возвращается сообщение «Ошибка: невозможно установить заголовки после их отправки».Я считаю, что это потому, что я звоню Res дважды.Любые идеи о том, как структурировать это лучше?

Это мой метод:

function createProductsWebHook(req,res,next) {
//if(req.headers){
//    res.status(200).send('Got it')
//     return next()
// }
 res.sendStatus(200) 
next()
const productResponse = req.body
console.log(productResponse)
const product = Product.build({
    body_html: req.body.body_html,
    title: req.body.title,
});
product.save()
    .then(saveProduct => res.json(saveProduct))
    .catch((e)=> {
        console.log(e)
    });
}

1 Ответ

0 голосов
/ 23 января 2019

Это происходит потому, что промежуточное программное обеспечение, 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...