将 getServerSideProps 函数放在帮助程序中
Posted
技术标签:
【中文标题】将 getServerSideProps 函数放在帮助程序中【英文标题】:Place getServerSideProps function in an helper 【发布时间】:2021-08-10 04:59:59 【问题描述】:我有很多页面需要使用 firebase 管理方法来保护:
const getServerSideProps = async (ctx: GetServerSidePropsContext) =>
try
const cookies = nookies.get(ctx);
const token = await firebaseAdmin.auth().verifyIdToken(cookies.token);
const uid, email = token;
return
props:
email,
uid,
,
;
catch (err)
return
redirect:
permanent: false,
destination: "/",
,
props: as unknown as never,
;
;
const ExpertPage = (
props: InferGetServerSidePropsType<typeof getServerSideProps>,
) =>
return (
<Layout type=ILayoutType.EXPERT>
<ProtectedPage1 props=props />
</Layout>
);
;
export default ExpertPage;
如您所见,应该在所有这些页面上调用函数 getServerSideProps
,这是我想避免的。
我试图将它移动到一个助手中,以便在此处将其称为类型InferGetServerSidePropsType<typeof getServerSideProps>
但它没有运行。我想知道是否有更好的方法。
【问题讨论】:
这是否有助于回答您的问题:Creating a HOC (higher order component) for cookies in nextJS?您可以创建一个包装函数,您可以在所有页面的getServerSideProps
函数上调用该函数。
嘿,@juliomalves 让我试试这个。
【参考方案1】:
只需从页面重新导出即可:
// utils/commonGetServerSideProps.ts
const getServerSideProps = async (ctx: GetServerSidePropsContext) =>
try
const cookies = nookies.get(ctx);
const token = await firebaseAdmin.auth().verifyIdToken(cookies.token);
const uid, email = token;
return
props:
email,
uid,
,
;
catch (err)
return
redirect:
permanent: false,
destination: "/",
,
props: as unknown as never,
;
;
export default getServerSideProps;
// pages/expert.tsx
const ExpertPage = (
props: InferGetServerSidePropsType<typeof getServerSideProps>,
) =>
return (
<Layout type=ILayoutType.EXPERT>
<ProtectedPage1 props=props />
</Layout>
);
;
export default ExpertPage;
export default as getServerSideProps from "../utils/commonGetServerSideProps"
【讨论】:
以上是关于将 getServerSideProps 函数放在帮助程序中的主要内容,如果未能解决你的问题,请参考以下文章
Next.js getServerSideProps |函数的奇怪行为
如何将道具从组件传递到 NextJS 中的 getServerSideProps()?
为啥 getServerSideProps 没有将正确的值传递给组件 props?