将 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&lt;typeof getServerSideProps&gt;

但它没有运行。我想知道是否有更好的方法。

【问题讨论】:

这是否有助于回答您的问题: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?

getServerSideProps 无法正常运行

将单个 getServerSideProps 方法导入 Nextjs 中的多个页面

Next.js 中为啥没有通过 getServerSideProps 将 cookie 发送到服务器?