res.redirect () не работает, кроме как с CTRL-R: проблема с кэшированием? - PullRequest
0 голосов
/ 19 мая 2018

Я думаю, что у меня что-то вроде проблемы с кешем в Express (я использую Google Datastore в качестве БД).

Когда запускается маршрут delete, указанный ниже:

  • Мой элемент правильно удален из БД
  • res.redirect() отлично работает
  • Но мой dashboard по-прежнему показывает удаленный элемент -> Мне нужно CRTL-R, чтобы увидеть его исчезновение...

Мой delete маршрут:

router.post('/delete', async (req, res) => {
  await deleteOneHouse(req.params.houseID)
  res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate')
  res.redirect('/dashboard')
})

При необходимости функция deleteOnHouse.

async function deleteOneHouse(ID) {
  try {
    const houseKey = datastore.key(['data', ID])
    datastore.delete(houseKey).then(() => {
      console.info(`House ${ID} deleted`)
      return
    })
  } catch (e) {
    console.error(e)
  }
}

У васесть подсказка?Спасибо.

1 Ответ

0 голосов
/ 19 мая 2018

console.log(), безусловно, ваш друг для отладки.

res.redirect() был запущен ДО конца delete op.Добавьте await, и он отлично работает.

Post маршрут для удаления:

router.post('/delete', async (req, res) => {
  // Delete this house
  await deleteOneHouse(req.params.houseID)
  // Redirect to Dashboard
  res.redirect('/dashboard')
})

Delete func.

async function deleteOneHouse(ID) {
  try {
    const houseKey = datastore.key(['data', ID])
    const deleted = await datastore.delete(houseKey)
    console.info(`House ${ID} deleted`)
    return
  } catch (error) {
    console.error(error)
  }
}
...