Бесконечный цикл при перенаправлении в getInitialProps в Next.js

#node.js #next.js #infinite-loop

Вопрос:

Я только что научился Next.js и у меня есть одна проблема с getInitialProps in _app.jsx . Я не знаю, почему возникает ошибка бесконечного цикла. Пожалуйста, скажите мне, почему бесконечный цикл и как это исправить.

 const MyApp = ({ Component, pageProps }) => {

  return (
    <>
       <Component {...pageProps} />
    </>
  );
};

MyApp.getInitialProps = async ({ ctx }) => {
  console.log("run 1");
  if (ctx.res) {
    console.log("run here");
    ctx.res.writeHead(302, {
      Location: "/login",
    });
    ctx.res.end();
  }
  return {};
};

export default MyApp;
 

Комментарии:

1. Бесконечный цикл происходит потому, что этот код также будет выполняться, когда вы находитесь на /login странице.

2. спасибо вам, но если я не буду использовать ctx.res?. writeHead(302, { Местоположение: «/логин»}); в getInitialProps просто войдите 1 раз, вы знаете, почему это?

Ответ №1:

Бесконечный цикл происходит потому, что перенаправление также происходит, когда вы находитесь на /login странице. Чтобы предотвратить это, убедитесь, что перенаправление не происходит, когда вы находитесь на этой странице.

 MyApp.getInitialProps = async ({ ctx }) => {
    if (ctx.res amp;amp; ctx.asPath !== "/login") {
        ctx.res.writeHead(302, {
            Location: "/login",
        });
        ctx.res.end();
     }
     return {};
};
 

Комментарии:

1. Вполне уверен, что это правильный ответ, кроме того, мне интересно, нужен ли 302, вы можете просто сделать redirect(ctx, /login);