getServerSideProps 不使用导入更新数据
Posted
技术标签:
【中文标题】getServerSideProps 不使用导入更新数据【英文标题】:getServerSideProps is not updating data with import 【发布时间】:2021-08-20 18:40:46 【问题描述】:我遇到了 NextJS 中的 getServerSideProps
没有在页面加载时更新值的问题。从导入的 JSON 文件的数据中调用时,它似乎与使用 getStaticProps
具有相同的效果。
这是适用的代码:
/update/[...id].js
import hasPermission, getPermissions from '../../lib/permissions'
...
//in the page function I use the ternary to check permission of the user
(hasPermission(session.user.email, `$params.id[0]-edit`, permissions)) ? <HasPerm /> : <NoPerm />
...
export async function getServerSideProps(context)
const params = context.query
const permissions = getPermissions()
return
props: params, permissions
/lib/permissions.js
import permissions from '../db/users.json'
export function hasPermission(username, group, perm = false)
if (!perm)
perm = permissions
if (username in perm && perm[username].groups.includes(group))
return true
if (perm.all.groups.includes(group))
return true
return false
export function getPermissions()
return permissions
对于一开始就可以理解的 s-s-r 页面,我将权限传递给 getStaticProps
中的页面,并将这些值传递到这些页面中的 hasPermission()
函数中,以便在权限更改时重新验证它们。然而getServerSideProps
中没有重新验证选项,因此根本不会重新验证数据。我之前使用过getInitialProps
,但几乎每个人都不鼓励这样做,因为它会禁用 ASO。
如何使用getServerSideProps
以至少重新验证我导入的 json?
【问题讨论】:
【参考方案1】:由于其他原因,我最终没有使用 json 导入,而是使用了 fs
,但通过在 getServerSideProps
中使用动态导入解决了这个问题:
export async function getServerSideProps(context)
const permissions = await import('../db/users.json')
也不要犯同样的错误,将整个权限数据库传递给每个用户,就像在getStaticProps
中使用getPermissions
之类的函数将数据传递给页面中的hasPermission
函数一样。相反,如果用户有权限,则仅使用 getServerSideProps
提供数据。换句话说,确保您从服务器端保留数据。然后,如果需要,您还可以将个人的权限传递给页面,例如显示一条消息说您没有权限。
【讨论】:
以上是关于getServerSideProps 不使用导入更新数据的主要内容,如果未能解决你的问题,请参考以下文章
将单个 getServerSideProps 方法导入 Nextjs 中的多个页面
getServerSideProps 在生产中不渲染动态页面,并显示 404 错误