Поймать выполняется, когда. Тогда операция прошла успешно - PullRequest
0 голосов
/ 24 января 2019
db('fruit').where('fruit_name', 'apple')
    .then(data => {
      if (data.length === 0) {
        db('fruit').insert({
          amount: '2'     //just for this post
        })
          .then(res.sendStatus(200))
          .catch(res.sendStatus(500));
      }
      else {
        db('fruit').where('fruit_name', 'apple').update({
          amount: '5'    //just for this post
        })
          .then(res.sendStatus(200))
          .catch(res.sendStatus(500))
      }
    })
    .catch(error => {
      res.sendStatus(500)
    })

Я не понимаю, почему выполняется блок catch, и сервер выдал мне ошибку Can't set header after sending them. Эта ошибка возникает, потому что я отправляю два res.sendStatus. Блок .then работает нормально, и блок .catch не должен выполняться, если только данные не сохраняются в БД.

Это записано в knex.js на сервере Node Express, и на всякий случай оператор запроса запрашивает таблицу фруктов, где элемент столбца fruit_name равен apple, вставьте новую строку суммы, если apple не существует, если еще Существуют обновления строки суммы.

1 Ответ

0 голосов
/ 24 января 2019
db('fruit').where('fruit_name', 'apple')
.then(data => {
  if (data.length === 0) {
    db('fruit').insert({
      amount: '2'     //just for this post
    })
      .then(()=>res.sendStatus(200))
      .catch(()=>res.sendStatus(500));
  }
  else {
    db('fruit').where('fruit_name', 'apple').update({
      amount: '5'    //just for this post
    })
      .then(()=>res.sendStatus(200))
      .catch(()=>res.sendStatus(500))
  }
})
.catch(error => {
 return res.sendStatus(500)
})

Привет калверт.Вы должны вернуть свои ответы. Теперь это должно работать нормально.

...