Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript axios授权头仅用于get请求_Javascript_Api_Http_Authorization_Axios - Fatal编程技术网

Javascript axios授权头仅用于get请求

Javascript axios授权头仅用于get请求,javascript,api,http,authorization,axios,Javascript,Api,Http,Authorization,Axios,我有一个简单的api端点,用于共享POST/api/v1/posts/{id}/share,它需要使用承载令牌进行身份验证 我尝试发送一个POST请求,如下所示,它以401响应 axios.post(`/api/v1/posts/${id}/share`, { "headers": { "Authorization":"Bearer "+token, "Content-Type": "applicat

我有一个简单的api端点,用于共享POST
/api/v1/posts/{id}/share
,它需要使用承载令牌进行身份验证

我尝试发送一个POST请求,如下所示,它以401响应

axios.post(`/api/v1/posts/${id}/share`,
        {
        "headers": {
                "Authorization":"Bearer "+token,
                "Content-Type": "application/x-www-form-urlencoded",
                "Accept": "application/json"
            },
        });
只有当我将其更改为接受后端上的GET并将代码更改为此时,它才起作用

axios.get(`/api/v1/posts/${id}/share`,
        {
        "headers": {
                "Authorization":"Bearer "+token,
                "Content-Type": "application/x-www-form-urlencoded",
                "Accept": "application/json"
            },
        });
我用http客户端测试了我的端点(失眠),所以问题似乎确实出在axios上。为什么会发生这种情况?我该如何解决


我使用的服务器是apache,后端框架是laravel,所以我使用不同的语法解决了这个问题

const options = {
        method:"post",
        "headers": {
            "Authorization":token,
            "Content-Type": 'application/x-www-form-urlencoded',
            "Accept": "application/json"
        },
        url:`/api/v1/posts/${id}/share`
    };

    axios(options);

老实说,我说不出发生了什么变化,但你可以为任何看到这一点的人解释一下。

这个问题的根本原因是:
axios.post
axios.get
有不同的语法——第二个参数在
axios.get
中表示“config”,但在
axios.post
中表示“data”。这就是为什么它在GET中有效,但在POST中失败的原因

根据axios的说法,这两种语法是:

get(url[,config])

post(url[,数据[,配置]])

因此,当您发送带有代码的HTTP POST请求时:

axios.post(`/api/v1/posts/${id}/share`,
        {
        "headers": {
                ...
            },
        });
发送请求时,HTTP正文
{“header”:{…}
——未配置请求头

要使其与
axios.post
一起工作,应将
头文件
配置对象作为第三个参数传递。例如:

axios.post(`/api/v1/posts/${id}/share`,
        {}, // or whatever data you want to send.
        {
        "headers": {
                ...
            },
        });