next.js 使用getStaticProps更新实时数据库中的数据

92dk7w1h  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(231)

我有一个应用程序,其中包含使用getStaticProps从Realtime Firebase数据库中获取的减价帖子和评论。
首先,我得到了所有的路径:

export async function getStaticPaths() {
  const files = readdirSync('posts')

  const paths = files.map(fileName => ({
    params: {
      postname: fileName.replace('.md', '')
    }
  }))

  return {
    paths,
    fallback: false
  }
}

然后,我显然会得到降价数据沿着评论本身的快照:

export async function getStaticProps({ params: { postname } }) {
  const fileName = readFileSync(`posts/${postname}.md`, 'utf-8')
  const { data: frontmatter, content } = matter(fileName)
  const snapshot = await retrieveComments(postname).then(snapshot => {
    return { props: { snapshot } }
  })
  const slug = postname

  return {
    props: {
      frontmatter,
      content,
      snapshot,
      slug
    }
  }
}

在获取减价数据时,一切都很正常,但是如果我向Realtime数据库添加评论并更新页面,评论列表就不会在UI中更新。当我使用getServerSideProps时,一切都很正常。请记住,我们不能同时使用getStatic...getServerSide...。我该怎么办?此外,评论列表从未更新的问题只出现在生产中。
AND THE PROBLEM IS A HUNDRED PERCENT NOT IN THE CRUD OPERATIONS WITH THE DATABASE

lrl1mhuk

lrl1mhuk1#

页面是静态生成的,因此它只会在下一次生成时显示更新的结果。假设您正在从服务器获取更新的数据,则可以在有人发表评论时使用按需重新验证:

export default async function handler(req, res) {
  try {
    // This should be the actual path not a rewritten path
    // e.g. for "/blog/[slug]" this should be "/blog/post-1"
    await res.revalidate('/path-to-revalidate');
    return res.json({ revalidated: true });
  } catch (err) {
    // If there was an error, Next.js will continue
    // to show the last successfully generated page
    return res.status(500).send('Error revalidating');
  }
}

相关问题