首页 > 解决方案 > res.redirect() 除了使用 CTRL-R 之外不起作用:缓存问题?

问题描述

我想我对 Express 有一种“缓存问题”(我使用 Google Datastore 作为数据库)。

delete触发以下路由时:

我的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)
  }
}

你有什么线索吗?谢谢。

标签: expressredirectcachinggoogle-cloud-datastore

解决方案


console.log()肯定是你调试的朋友。

res.redirect()是在操作结束之前触发的delete。添加一个await,它工作正常。

Post删除路线:

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

Delete功能

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)
  }
}

推荐阅读