javascript - 为什么 Axios 在 PATCHing 到特定 URL 时不使用 Content-Type 标头并将请求方法转换为 GET?
问题描述
我使用 Axios 继承了一个代码库,否则我对该库不熟悉。这是一个 Node 应用程序,我正在尝试向第三方 API 发送 PATCH 请求。Axios 使用以下配置:
const axios = require('axios').create({
baseURL: process.env.API_URL,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
auth: {
username: process.env.API_USER,
password: process.env.API_PW,
},
});
然后我尝试发出以下 PATCH 请求:
const data = {
fields: {
field_a: 'yes',
field_b: 'no',
},
};
try {
const res = await axios.patch(`/user/${user.id}`, data, {
headers: {
'Content-Type': 'application/json'
}
});
return res;
} catch (err){
console.error(err);
}
据我所知,我只是在进行补丁调用时重新定义了 Content-Type 标头,但这只是试图解决这个问题。这两种方式都行不通。我在响应对象的 config 属性中看到的内容如下(大部分都被排除在外):
{
headers: {
Accept: "application/json"
User-Agent: "axios/0.19.0"
},
method: 'patch',
}
查看同一响应对象的请求属性,我看到那里的方法被列为“GET”,其中 Content-Type 标头也没有列出。看起来好像 Content-Type 标头正在被剥离,并且方法正在更改为 GET。
如果我只更改 URL 目标/userWRONGPATH/${user.id}
,则按预期收到 404 响应,但响应对象的配置数据包括以下内容:
{
headers: {
Accept: "application/json"
Content-Length: 105
Content-Type: "application/json"
User-Agent: "axios/0.19.0"
}
}
响应对象的请求方法现在是预期的“PATCH”。如果这实际上是这里发生的事情,我不确定为什么补丁方法适用于其他路径。
解决方案
您好,我认为问题可能与在 Axios 中再次发送标头有关,您定义了一个配置并将其添加到所有请求中。
这是我使用 axios 订购项目的示例。
// Axios custom config
const axiosInstance = axios.create({
baseURL: urlBase,
// timeout: 1000,
headers: { 'Content-type': 'application/json' },
});
export const apiPatchRequest = (url, id, obj) => (
axiosInstance.patch(`${url}/${id}`, obj)
);
推荐阅读
- c# - C# 单元测试验证 Activator 实例化的类的非抽象方法
- hadoop - Hive:如何在不知道 .dat 文件的 SCHEMA 的情况下从位于 HDFS 中的 .DAT 文件在 Hive 中创建表?
- service - 在 CHDIR 生成 /opt/Informer5/informer5.sh 步骤失败:没有这样的文件或目录
- pentaho - Pentaho Kettle - 动态获取文件名
- javascript - Ext js 5.0.1 列自定义排序
- python - 从 java 客户端订阅到 python opcua 服务器不起作用
- vue.js - Vuejs的v-for中如何处理组件发出的事件
- sql - 拆分字段并添加小数点以创建数值 SQL
- redis - redis pub sub 仅适用于某组键?
- protractor - 如何使用量角器执行 .exe 文件?