Axios发布请求返回401

时间:2019-10-16 14:18:35

标签: javascript node.js reactjs express

我正在尝试向API发出POST请求,但始终收到401错误。我可以以200个状态向相同的API发出GET请求,所以我想知道我的语法是否在某个地方不正确。

我正在使用的API是nocrm.io api,我正在尝试发出的POST请求可以在其API参考中找到:https://youdontneedacrm.com/api#create-a-lead

这是我来自server.js文件的POST请求

app.post('/crm/leads', (request, response) => {

    var baseurl = 'https://OURACCOUNT.nocrm.io/api/v2/'
    var apikey = 'API_KEY'
    var path = leads

        axios.post(baseurl + path, {
            params: {
                title: "Testing",
                description: "Business Name: Test Company",
                user_id: "someone@someemail.com",
                tags: ['TAG']
            },
            headers: {'X-API-KEY': apikey, content_type: "json", accept: "application/json"} 
        }).then(function(res){
            console.log("Good");
            response.send(res);
        }).catch(function(error){
            console.log("Error: " + error);
        })
}

这是我在client.js文件中的请求

        $.post('/crm/leads').then(response => {
            console.log(response);
        }).catch(error => {
            console.log("Error: " + error);
        })

我从中得到的错误是:错误:请求失败,状态为401

这是一个GET请求的示例,该请求在server.js文件中可以正常工作

app.get('/crm/fields', (request, response) => {

    var baseurl = 'https://OURACCOUNT.nocrm.io/api/v2/'
    var apikey = 'API_KEY'
    var path = fields;

        axios.get(baseurl + path, {
            headers: {'X-API-KEY': apikey, content_type: "json", accept: "application/json"},
            params: {'type': "lead"}
        }).then(function(res){
            response.send(res.data);  // send data to client 
        }).catch(function(error){
            console.log("Error: " + error);
        })
}

这是我client.js文件中对GET请求的调用

$.get('/crm/fields').then(response => {
            console.log(response);
        }).catch(error => {
            console.log("Error: " + error);
        })

任何帮助或建议将不胜感激,谢谢!

[编辑] 我发现了问题。我的答案在下面。

2 个答案:

答案 0 :(得分:1)

您可以创建一个通用请求程序以减少冗余

function doRequest(method: string, url: string, params?: Object, data?: Object){
    var headers ...;
    return axios({
      method: method,
      baseUrl: 'getfromconfig'
      url: url,
      data: data,
      params: params
    });
}

其中数据:要发布,参数:queryparams,方法:GET / POST / PUT ... 标头可以就地初始化或作为参数传递。在每个文件中都可以重用。

答案 1 :(得分:0)

在查看来自API支持的请求日志时,我找到了问题的解决方案。起初我不清楚的问题是我在参数中包含标题。

请求应改为:

app.post('/crm/leads', (request, response) =>{
    var baseurl = 'https://OURACCOUNT.nocrm.io/api/v2/'
    var apikey = 'API_KEY'
    var path = leads

    var params = {
        title: "Testing",
        description: "Business Name: Test Company",
        user_id: "someone@someemail.com",
        tags: ["TAG"]
    }

     axios.post(baseurl + path,
            params
        ,{
            headers: {'X-API-KEY': apikey, content_type: "json", accept: 
        "application/json"} 
        }).then(function(res){
            console.log("Good");
            response.send(res);
        }).catch(function(error){
            console.log("Error: " + error);
        })
}