在我使用 Next JS 15 和 React 19 的项目中,我尝试使用拦截器中的 next 重定向进行重定向。但是当我尝试进行此重定向时:
Error: NEXT_REDIRECT
at <unknown> (file://project/apps/web/lib/axios.ts:36:15)
at async Object.getProfile (file://project/apps/web/lib/api/user.ts:12:23)
at async Page (file://project/apps/web/app/dashboard/page.tsx:4:22)
34 | async error => {
35 | if (error.response && error.response.status === 401)
> 36 | redirect('/auth/login');
| ^
37 |
38 | return Promise.reject(error);
39 | }, {
digest: 'NEXT_REDIRECT;replace;/auth/login;307;'
}
我无法找出此错误的原因。我需要检查 /dashboard 下每个请求中的 401 错误。我在等待你的想法。
我的完整代码:
'use server';
import axios from 'axios';
import { redirect } from 'next/navigation';
import { getSession } from './session';
const baseURL = process.env.NEXT_PUBLIC_BACKEND_URL;
export const axiosInstance = axios.create({
baseURL,
headers: {
'Content-Type': 'application/json',
},
});
axiosInstance.interceptors.request.use(
async config => {
const session = await getSession();
if (session && session.accessToken) {
config.headers.Authorization = `Bearer ${session.accessToken}`;
}
return config;
},
error => {
return Promise.reject(error);
},
);
axiosInstance.interceptors.response.use(
response => response,
async error => {
if (error.response && error.response.status === 401)
redirect('/auth/login');
return Promise.reject(error);
},
);
我从AI那里得到了帮助,但除了检查组件中的401错误之外,它没有给我任何建议。我在 Stack Overflow 上找到的解决方案不起作用。
我在从 RSC 将 Next14 传递到 Next15 的服务器操作中遇到同样的问题 但之前我使用 try/finally 在 Next14 上修复了它:
内部抛出错误,因此应该在redirect
块之外调用它。try/catch
Next 13.4 错误:API 路由中的 NEXT_REDIRECT:
export default async function Page() { let redirectPath: string | null = null try { //Rest of the code redirectPath = `/dashboard` } catch (error) { //Rest of the code redirectPath = `/` } finally { //Clear resources if (redirectPath) redirect(redirectPath) } return <>{/*Rest of JSX*/}</> }
我能看到的唯一解决方案是返回所有服务器操作和页面捕获的一些类型错误,以在顶层进行重定向。