Axios删除请求未获取主体数据

时间:2019-04-03 06:43:25

标签: reactjs react-redux axios

我是react redux的新手。这里有一个delete request

export const deleterequest = (url, jdId) =>
    axios.delete(
        url,
        jdId,
        {
            headers: {
                "Authorization": localStorage.getItem("access_token") !== null ? `Bearer ` + localStorage.getItem("access_token") : null,
                "Content-Type": "application/json"
            }
        }
    ).then(data => {
        if (data.status === HttpStatus.OK) {
            return {
                status: data.status,
                payload: data.data
            };
        }
    }).catch(err => {
        return {
            status: err.response ? err.response.data : 'Network error',
            payload: null
        };

因此,我尝试使用此围裙。 jdId是一个字符串数组。因此,但是当我以这种方式使用时,我的请求标头不会显示此数据。

那么,我在做什么错了。有人可以帮我吗?

6 个答案:

答案 0 :(得分:1)

我在 0.20.0 版本中遇到了相同的问题,并且在升级到0.21.0 后解决了问题

答案 1 :(得分:1)

试试这个,

在 React js 中,

deleteData = (question) => {
    if (question !== "") {
        const url = "http://localhost:3001/questions/delete-question/" + question

        const headers = {
            "Content-Type": "application/json"
        }

        axios.delete(url, {data: question}, headers)
            .then(res => {
                console.log(res)
            })
            .catch(err => {
                console.log(err)
            })
    }
}

在后端,

router.delete('/delete-question/:question', (req, res) => {
    questions.deleteQuestion(req.params.question)
        .then(response => {
            res.status(200).send(response);
        })
        .catch(error => {
            res.status(500).send(error);
        })
})


const deleteQuestion = (question) => {
  return new Promise(function(resolve, reject) { 
    pool.query(`DELETE FROM ${QUESTIONS_TABLE} WHERE question = $1`, [question], (error, results) => {
      if (error) {
        reject(error)
      }
      resolve({
        status: 'success',
        message: 'Question deleted'
      })
    })
  })
}

确保 axios 参数的格式为 axios.delete(url, {data: question}, headers) {} 括号中的数据很重要

那么 api url 应该是这样的 /delete-question/:question

像这样从前端访问它"http://localhost:3001/questions/delete-question/" + question

答案 2 :(得分:0)

带有正文的删除请求需要在数据键下设置

export const deleterequest = (url, jdId) =>
    axios.delete(
        url,
        { data: jdId },
        {
            headers: {
                "Authorization": localStorage.getItem("access_token") !== null ? `Bearer ` + localStorage.getItem("access_token") : null,
                "Content-Type": "application/json"
            }
        }
    ).then(data => {
        if (data.status === HttpStatus.OK) {
            return {
                status: data.status,
                payload: data.data
            };
        }
    }).catch(err => {
        return {
            status: err.response ? err.response.data : 'Network error',
            payload: null
 };

答案 3 :(得分:0)

Axios支持在删除请求中发送正文。在这种情况下,您必须以以下格式发送它:

axios.delete(
    url,
    {
        data: { jdId }, // or data: jdId, depending on how you handle it in the back end
        headers: {
            "Authorization": localStorage.getItem("access_token") !== null ? `Bearer ` + localStorage.getItem("access_token") : null,
            "Content-Type": "application/json"
        }
    }
)
.then(data => { 
    // rest of your code 
})
.catch(err => { 
    // handle error 
})

Axios希望删除请求中只有一个配置对象。 (请参见此处:https://github.com/axios/axios#axiosdeleteurl-config)该配置应具有两个可选键,即。 数据标头数据不过是请求正文。

希望这对您有所帮助。

答案 4 :(得分:0)

在我的情况下,我必须将一个对象传递给data,否则它将根本无法工作。

错误

axios.delete(url, {
          data: '123',
        });

正确

axios.delete(url, {
          data: { data: "123" },
        });

答案 5 :(得分:-1)

axios.delete(url, {headers: {}, data: {}})

我认为这会奏效