如何设置前端仅接收服务端的状态码与Cookie响应?
解决RTK Query因无JSON响应报错的问题
问题根源是RTK Query的fetchBaseQuery默认会强制将响应解析为JSON格式,而你的后端仅返回状态码和Cookie,没有JSON响应体,导致解析失败报错。可以通过以下方式修改前端代码:
针对单个接口禁用JSON解析
直接在刷新Token的endpoint中配置responseHandler,告诉RTK Query不要解析JSON,改用文本处理响应,同时可自定义返回内容:
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react"; export const refreshApi = createApi({ reducerPath: "apiSlice", baseQuery: fetchBaseQuery({ baseUrl: `${process.env.NEXT_PUBLIC_SERVER_URL}`, credentials: "include", }), endpoints: (builder) => ({ refreshAuthorization: builder.query({ query: () => "/api/auth/refresh", // 禁用JSON解析,改用文本处理响应体 responseHandler: 'text', // 自定义转换响应,返回状态码供前端判断请求结果 transformResponse: (_, meta) => ({ status: meta?.response?.status }), }), }), }); export const { useRefreshAuthorizationQuery } = refreshApi;
补充说明
- 设置
responseHandler: 'text'后,RTK Query会把响应体当作纯文本处理(即使是空响应体也不会报错)。 - 浏览器会自动处理后端设置的
httpOnlyCookie,不需要前端额外操作,只要请求的credentials: "include"配置正确即可。 - 如果后端返回的是
204 No Content(无响应体),也可以用responseHandler: 'none',效果类似。
内容的提问来源于stack exchange,提问作者user22749699
相关产品推荐
相关产品推荐

