有没有人找到了在NextJS 13中使用axios拦截器的解决方案?我觉得它应该是相当直接的,但它肯定不是。
一个简单的客户端组件:
"use client"
import React, {useState} from 'react'
import axiosInterceptorInstance from '@/lib/request'
interface Device {
...
}
export default function DevicesHolder() {
const [devices, setDevices] = useState<Device[]>([])
axiosInterceptorInstance.get('/api/v1/staff-admin/devices?page=1&itemsPerPage=20').then((res) => {
setDevices(res.data.data)
})
return (
<>
{devices.map((device, key) => (
<div key={key}>
<h1>{device.imei}</h1>
</div>
))}
</>
)
}
字符串
我的axios拦截器:
import axios from "axios";
import { redirect } from 'next/navigation'
const axiosInterceptorInstance = axios.create({
baseURL: process.env.NEXT_PUBLIC_API_BASE_URL, // Replace with your API base URL
});
axiosInterceptorInstance.interceptors.response.use(
(response) => {
// Modify the response data here
return response;
},
(error) => {
// Handle response errors here
// if unathorized, redirect to login
console.log("server", typeof window === 'undefined')
if (error.response.status === 401) {
redirect('/login')
}
return Promise.reject(error);
}
);
export default axiosInterceptorInstance;
型
在某种程度上,请求同时在服务器和客户端上运行。它无法在任何一个上重定向,并抛出NEXT_REDIRECT错误(这是应该发生的??). Any ideas?
编辑1:我应该注意到,我尝试使用window.location.href,但当它在服务器上运行时,显然会引发错误。
1条答案
按热度按时间wfypjpf41#
正如@ShueiYang评论的那样,动态导入它是让它只在客户端运行的解决方案。下面是一个组件中的示例用法(该组件是一个客户端组件)
字符串