Javascript 当CURL工作时,为什么Axios出现错误415?

Javascript 当CURL工作时,为什么Axios出现错误415?,javascript,node.js,curl,ecmascript-6,axios,Javascript,Node.js,Curl,Ecmascript 6,Axios,如果我这样做 然后我得到了预期的令牌。如果我这样做 curl -s -d "username=test&password=test" -X POST https://example.com/api/jwt/login 然后我得到 const axios = require('axios') async function getToken() { try { const response = await axios.post('https://examp

如果我这样做

然后我得到了预期的令牌。如果我这样做

curl -s -d "username=test&password=test" -X POST https://example.com/api/jwt/login
然后我得到

const axios = require('axios')

async function getToken() {
  try {
    const response = await axios.post('https://example.com/api/jwt/login', {
      headers: {'Content-Type': 'application/x-www-form-urlencoded'},
      params: {
        username: "test",
        password: "test"
      }
    })
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}
getToken()
问题: 有人能理解为什么它与
curl
一起工作而不与
axios一起工作吗?我做错了什么

更新 下面给出了相同的错误

Error 415 Unsupported Media Type
HTTP ERROR 415
Problem accessing /api/jwt/login. Reason:
Unsupported Media Type

尝试使用querystring模块来编辑数据

const qs = require('query-string');

async function getToken() {
  try {
    const response = await axios.post('https://example.com/api/jwt/login', {
      method: 'post',
      params: qs.stringify({
        username: "test",
        password: "test"
      })
  })
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}
然后

npm install query-string

尝试使用querystring模块编辑数据

const qs = require('query-string');

async function getToken() {
  try {
    const response = await axios.post('https://example.com/api/jwt/login', {
      method: 'post',
      params: qs.stringify({
        username: "test",
        password: "test"
      })
  })
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}
然后

npm install query-string

axios.post的参数是
url[,data[,config]]
。看见您的示例将以下内容传递给
data
参数,该参数将作为请求主体:

const qs = require('query-string');
//...    
data: qs.stringify({
username: "test",
password: "test"
}),
服务器无法对此进行分析或分析不正确,因此返回
415不支持的媒体类型

您需要做的是分离出请求主体和配置。您的请求主体也需要被删除


axios.post
的参数是
url[,data[,config]]
。看见您的示例将以下内容传递给
data
参数,该参数将作为请求主体:

const qs = require('query-string');
//...    
data: qs.stringify({
username: "test",
password: "test"
}),
服务器无法对此进行分析或分析不正确,因此返回
415不支持的媒体类型

您需要做的是分离出请求主体和配置。您的请求主体也需要被删除


由于您将
内容类型
设置为
应用程序/x-www-form-urlencoded
,因此无法传入javascript对象,因此需要对其进行解析

您可以使用JavaScript中的
URLSearchParams
API,或者使用
qs
包来实现这一点。您还需要使用有效负载中的
数据
键,而不是
参数
键:

const axios=require('axios'))
常量qs=require('qs')
异步函数getToken(){
试一试{
const response=等待axios.post(
'https://example.com/api/jwt/login',
stringify({username:'test',password:'test'}),
{标题:{'Content-Type':'application/x-www-form-urlencoded'}
)
控制台日志(响应);
}捕获(错误){
控制台错误(error);
}
}
getToken()

您可以在axios github上找到概述这一点的文档:

由于您的
内容类型为
application/x-www-form-urlencoded
,因此无法传入javascript对象,需要对其进行解析

您可以使用JavaScript中的
URLSearchParams
API,或者使用
qs
包来实现这一点。您还需要使用有效负载中的
数据
键,而不是
参数
键:

const axios=require('axios'))
常量qs=require('qs')
异步函数getToken(){
试一试{
const response=等待axios.post(
'https://example.com/api/jwt/login',
stringify({username:'test',password:'test'}),
{标题:{'Content-Type':'application/x-www-form-urlencoded'}
)
控制台日志(响应);
}捕获(错误){
控制台错误(error);
}
}
getToken()

您可以在axios github上找到概述这一点的文档:

对不起,输入错误。。。请尝试
data:qs…
而不是
param:qs…
找到此帖子:抱歉,输入错误。。。请尝试
data:qs…
而不是
param:qs…
找到此帖子:Wing的答案有效,而他没有
数据。我想这是唯一的区别?Wing的答案是有效的,因为他没有
数据。我想这是唯一的区别吧?