NextJS — Как объединить две обертки getServerSideProps?

#javascript #reactjs #next.js #next-redux-wrapper

Вопрос:

Я использую next-iron-session и next-redux-wrapper в своем клиенте nextjs. Оба они требуют, чтобы я обернул getServerSideProps с их соответствующими функциями. Кто-нибудь знает, как я могу связать обертки цепочкой ?

следующая-железная-сессия (индивидуальная)

 export const getServerSideProps = 
  withIronSession(
  async ({ req, res }) => {
    const user = req.session.get("user");

    if (!user) {
      res.statusCode = 404;
      res.end();
      return { props: {} };
    }

    return {
      props: { user }
    };
  },
  {
    cookieName: "MYSITECOOKIE",
    cookieOptions: {
      secure: process.env.NODE_ENV === "production" ? true : false
    },
    password: process.env.APPLICATION_SECRET
  }
);
 

далее-переделка-обертка (индивидуальная)

 export const getServerSideProps = wrapper.getServerSideProps((store) => async () => {
  const user = store.getState().user
  console.log('user', user)
})
 

Комбинация (не работает)

Ошибка типа: Не удается прочитать свойство «ttl» неопределенного

     export const getServerSideProps = withIronSession(
      wrapper.getServerSideProps(
        (store) =>
          async ({ req, res }) => {
            const user = req.session.get('user')
            console.log(user)
            return {
              props: { user: 'hi' },
            }
          },
        {
          cookieName: 'MYSITECOOKIE',
          cookieOptions: {
            secure: process.env.NODE_ENV === 'production' ? true : false,
          },
 password: process.env.APPLICATION_SECRET
        },
      ),
    )
 

Ответ №1:

Я понятия не имею, почему это вдруг сработало. Это было мое первое решение, и оно не сработало уже сейчас. Но для более новых, пожалуйста …

 export const getServerSideProps = wrapper.getServerSideProps((store) =>
  withIronSession(
    async ({ req, res }) => {
      const user = await req.session.get('user')
      console.log('uer', user)
      return {
        props: { user: 'hi' },
      }
    },
    {
      cookieName: 'MYSITECOOKIE',
      cookieOptions: {
        secure: process.env.NODE_ENV === 'production' ? true : false,
      },
      password: process.env.APPLICATION_SECRET,
    },
  ),
)