在 Next.js 中的`getServerProps`函数中控制重定向

338 阅读2分钟

若要在 Next.js 中的getServerProps函数中控制重定向,您有几个选项:

  1. 使用redirect返回值:可以使用redirect返回值在 getServerProps执行重定向。如果要根据某些条件重定向用户,这将非常有用。下面是一个示例:
export async function getServerSideProps(context) {
  const res = await fetch(`https://.../data`);
  const data = await res.json();

  if (!data) {
    return {
      redirect: {
        destination: '/',
        permanent: false,
      },
    };
  }

  return {
    props: {}, // will be passed to the page component as props
  };
}

 

在此示例中,如果变量datafalsy,则用户将被重定向到'/'路径。

  1. 使用res.redirect方法:如果要在getServerProps函数内执行重定向,可以使用res.redirect方法。但是,res对象在getServerPropshttp.ServerResponse类型,没有redirect方法。相反,您可以稍微重构代码以包含必要的帮助程序。下面是一个示例:
import type { GetServerSideProps, NextApiRequest, NextApiResponse } from 'next';
import { redirect, sendData, sendJson, sendStatusCode } from 'next/dist/next-server/server/api-utils';

const getServerSideProps: GetServerSideProps = async ({ req: apiReq, res: apiRes }) => {
  const req = apiReq as NextApiRequest;
  const res = apiRes as NextApiResponse;

  res.status = (statusCode) => sendStatusCode(res, statusCode);
  res.send = (data) => sendData(req, res, data);
  res.json = (data) => sendJson(res, data);
  res.redirect = (statusOrUrl: number | string, url?: string) =>
    redirect(res, statusOrUrl, url);

  // Your logic here...

  return { props: {} };
};

export { getServerSideProps };

 

在此示例中,我们将从'next/dist/next-server/server/api-utils'中导入必要的帮助程序,并使用它们来定义res对象上的redirect方法。然后,可以使用res.redirectgetServerProps中执行重定向。

  1. 使用自定义服务器端逻辑:如果需要对重定向过程进行更多控制,可以使用自定义解析程序实现自定义服务器端逻辑。此方法使您可以更灵活地处理重定向,并且在具有复杂的重定向要求时非常有用。您可以从 Next.js 的 apiResolver 中间件克隆逻辑,并对其进行修改以满足您的需求。但是,请记住,内部 API 可能会发生变化,因此通常不建议直接在生产代码中使用它们。

请记住导入必要的依赖项并根据您的特定要求修改代码。