重定向

redirect

这是发送 30x 响应的快捷方式。

import { redirect } from "@remix-run/node"; // or cloudflare/deno

export const action = async () => {
  const userSession = await getUserSessionOrWhatever();

  if (!userSession) {
    return redirect("/login");
  }

  return json({ ok: true });
};

默认情况下,它发送 302,但您可以将其更改为所需的任何重定向状态代码

redirect(path, 301);
redirect(path, 303);

您还可以发送 ResponseInit 来设置标头,例如提交会话。

redirect(path, {
  headers: {
    "Set-Cookie": await commitSession(session),
  },
});

redirect(path, {
  status: 302,
  headers: {
    "Set-Cookie": await commitSession(session),
  },
});

当然,如果您想自己构建它,您可以使用此助手执行重定向

// this is a shortcut...
return redirect("/else/where", 303);

// ...for this
return new Response(null, {
  status: 303,
  headers: {
    Location: "/else/where",
  },
});

您可以抛出重定向以突破调用堆栈并立即重定向

if (!session) {
  throw redirect("/login", 302);
}
文档和示例根据 MIT