重定向自Axios Interceptor和NextJS 13应用程序目录

jobtbby3  于 2023-08-04  发布在  iOS
关注(0)|答案(1)|浏览(97)

有没有人找到了在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,但当它在服务器上运行时,显然会引发错误。

wfypjpf4

wfypjpf41#

正如@ShueiYang评论的那样,动态导入它是让它只在客户端运行的解决方案。下面是一个组件中的示例用法(该组件是一个客户端组件)

const interceptor = (await import('@/lib/request')).default
    const { data } = await interceptor.post('/api/v1/staff-admin/login', {
        email: email,
        password: password
    })

字符串

相关问题