Tengo una solicitud de get en mi Redux Async Thunk . Después de llamar a get to my node.js express server, envía un código de estado 304 , por alguna razón no puedo obtener mis datos.
const userTokenAxios = axios.create({ baseURL: '/api/shoes', headers: { Authorization: `Bearer ${localStorage.getItem('token')}`, }, }); userTokenAxios.interceptors.response.use((response) => { if (response.data.errorMessage === 'jwt expired') { localStorage.removeItem('token'); localStorage.removeItem('user'); } }); export const getShoesAsync = createAsyncThunk( 'shoes/getShoesAsync', async (payload, { rejectWithValue }) => { try { const response = await userTokenAxios.get('/'); console.log(response); return response.data; } catch (error) { return rejectWithValue(error.response.data); } } );Está siendo llamado desde mi página de inicio:
useEffect(() => { dispatch(getShoesAsync()); }, [dispatch]); Pero no puedo obtener ningún dato ya que cada vez que se carga la página, el servidor envía un 304
mi controlador de fondo:
exports.getAllShoes = async (req, res, next) => { try { let query = Shoe.find({}); const shoes = await query.populate([ { path: 'user', select: 'username', }, ]); return res.status(200).json(shoes); } catch (err) { return next(err); } };app.js en mi carpeta de back-end:
// ROUTES app.use('/auth', authRouter); app.use( '/api', expressJwt({ secret: process.env.JWT_SECRET, algorithms: ['HS256'] }) ); app.use('/api/shoes', shoeRouter); package.json en mi carpeta de client
"proxy": "http://localhost:9000"Vista previa de mi red:
El problema es tu interceptor. Los interceptores de respuesta deben devolver un valor, una promesa rechazada o arrojar un error; de lo contrario, la promesa resultante se resolverá con undefined .
También parece extraño que esté interceptando errores de token en el interceptor de respuesta exitoso. Habría asumido que usarías el interceptor de errores.
userTokenAxios.interceptors.response.use( res => res, // success response interceptor err => { // usually you'd look for a 401 status ¯\_(ツ)_/¯ if (err.response?.data?.errorMessage === "jwt expired") { localStorage.removeItem('token'); localStorage.removeItem('user'); } return Promise.reject(err); } );Si en realidad está respondiendo con un estado 200 para errores de token, deberá manejarlo en el interceptor de éxito
userTokenAxios.interceptors.response.use( res => { if (res.data.errorMessage === "jwt expired") { localStorage.removeItem('token'); localStorage.removeItem('user'); // Make this look like an Axios error return Promise.reject({ message: "jwt expired", response: res, }); } return res; } );También parece que no necesita la barra diagonal final en su solicitud, así que simplemente use
const response = await userTokenAxios.get("");