본문과 헤더가있는 Axios 삭제 요청?


119

ReactJS에서 프로그래밍하는 동안 Axios를 사용하고 있으며 DELETE 요청을 서버에 보내는 척합니다.

이렇게하려면 헤더가 필요합니다.

headers: {
  'Authorization': ...
}

그리고 몸은

var payload = {
    "username": ..
}

인터 웹에서 검색 한 결과 DELETE 메서드에 "매개 변수"가 필요하고 "데이터"를 허용하지 않는다는 것만 발견했습니다.

다음과 같이 보내려고했습니다.

axios.delete(URL, payload, header);

또는

axios.delete(URL, {params: payload}, header);

그러나 아무것도 작동하지 않는 것 같습니다 ...

누군가 헤더와 본문 모두와 함께 DELETE 요청을 보낼 수 있는지 (그럴 것이라고 생각합니다) 어떻게 할 수 있는지 말해 줄 수 있습니까?

미리 감사드립니다!

답변:


145

그래서 여러 번 시도한 후에 작동한다는 것을 알았습니다.

주문 순서를 따르십시오. 매우 중요합니다. 그렇지 않으면 작동하지 않습니다.

axios.delete(URL, {
  headers: {
    Authorization: authorizationToken
  },
  data: {
    source: source
  }
});

2
안녕하세요, 귀하의 답변이 작동하는 이유를 설명해 주시겠습니까?
Franco Gil

102

axiox.delete요청 본문을 지원합니다. url 및 선택적 config의 두 매개 변수를 허용합니다. config.data다음과 같이 요청 본문 및 헤더를 설정하는 데 사용할 수 있습니다 .

axios.delete(url, { data: { foo: "bar" }, headers: { "Authorization": "***" } });

여기를 참조하십시오-https: //github.com/axios/axios/issues/897


문제는 내가 같은 삭제 요청에 몸과 헤더를 보낼 것입니다
Asfourhundred

83

다음은 axios로 다양한 http 동사를 보내는 데 필요한 형식에 대한 간략한 요약입니다.

  • GET: 두 가지 방법

    • 첫 번째 방법

      axios.get('/user?ID=12345')
        .then(function (response) {
          // Do something
        })
      
    • 두 번째 방법

      axios.get('/user', {
          params: {
            ID: 12345
          }
        })
        .then(function (response) {
          // Do something
        })
      

    위의 두 가지는 동일합니다. params두 번째 방법에서 키워드를 관찰하십시오 .

  • POSTPATCH

    axios.post('any-url', payload).then(
      // payload is the body of the request
      // Do something
    )
    
    axios.patch('any-url', payload).then(
      // payload is the body of the request
      // Do something
    )
    
  • DELETE

    axios.delete('url', { data: payload }).then(
      // Observe the data keyword this time. Very important
      // payload is the request body
      // Do something
    )
    

핵심 사항

  • get요청은 선택적으로 params쿼리 매개 변수를 올바르게 설정하기 위한 키가 필요합니다.
  • delete본문이있는 요청은 data키 아래에 설정되어야 합니다.

11
귀하의 답변은 스택 오버플로에 +2 upvote 기능이 있기를 바랍니다.
eli-bd

이것은 자세히 설명하는 유일한 답변입니다. 다른 사람들도 이해하는 데 정말 도움이되었습니다.
Geoff

본문이 아닌 매개 변수로 삭제 요청을 보내는 방법은 무엇입니까?
Ajay Singh

이 질문에 대한 최고의 답변입니다. 감사합니다.
HartleySan

1
@MaFiA, params와 함께 삭제 요청을 보내려면. 쿼리 문자열을 사용하여 URL에 간단히 넣을 수 있습니다
Van_Paitin

14

axios. delete 에는 url과 선택적 구성전달 됩니다.

axios.delete (url [, config])

구성에 사용할 수 있는 필드 에는 헤더가 포함될 수 있습니다 .

이렇게하면 API 호출을 다음과 같이 작성할 수 있습니다.

const headers = {
  'Authorization': 'Bearer paperboy'
}
const data = {
  foo: 'bar'
}

axios.delete('https://foo.svc/resource', {headers, data})

이 ... 나를 위해 일을하지 않는 나는이 const headers = {'Authorization': ...}data = {'username': ...}함께 종료 axios.delete('http://...', {headers, data})...하지만 서버는 헤더에 액세스 할 수 없습니다
Asfourhundred

브라우저에서 나가는 요청이 다릅니다. 이 Stackblitz ( stackblitz.com/edit/react-gq1maa ) 및 브라우저 네트워크 탭 ( snag.gy/JrAMjD.jpg ) 의 요청을 참조하십시오 . 여기에서 서버 측 헤더를 올바른 방식으로 읽고 있는지 또는 요청이 가로 채서 변조되지 않았는지 확인해야합니다.
Oluwafemi Sule 2018-06-30

6

나는 같은 문제를 해결했습니다.

axios.delete(url, {data:{username:"user", password:"pass"}, headers:{Authorization: "token"}})

5

실제로 axios.delete요청 본문을 지원합니다.
두 개의 매개 변수 (a URL및 선택적)를 허용 config합니다. 그건...

axios.delete(url: string, config?: AxiosRequestConfig | undefined)

다음을 수행하여 삭제 요청에 대한 응답 본문을 설정할 수 있습니다.

let config = { 
    headers: {
        Authorization: authToken
    },
    data: { //! Take note of the `data` keyword. This is the request body.
        key: value,
        ... //! more `key: value` pairs as desired.
    } 
}

axios.delete(url, config)

나는 이것이 누군가에게 도움이되기를 바랍니다!


1
감사합니다. 내 nestJs HttpService 삭제 메서드에서 다음과 같이 사용하고 있습니다. this.httpService.delete (apiUrl, {headers : headersRequest, data : deleteBody})
shanti

4

삭제의 경우 다음과 같이 수행해야합니다.

axios.delete("/<your endpoint>", { data:<"payload object">})

그것은 나를 위해 일했습니다.


2

다음을 통해 일부 헤더와 함께 HTTP DELETE를 보내려면 axios다음을 수행했습니다.

  const deleteUrl = "http//foo.bar.baz";
  const httpReqHeaders = {
    'Authorization': token,
    'Content-Type': 'application/json'
  };
  // check the structure here: https://github.com/axios/axios#request-config
  const axiosConfigObject = {headers: httpReqHeaders}; 

  axios.delete(deleteUrl, axiosConfigObject);

axios때로는 두번째 매개 변수는 HTTP 바디, 다른 시간 (필요할되지 않을 때) 그냥 두번째 매개 변수로 헤더를 통과 있어야하기 때문에 다른 HTTP 동사 (GET은 POST가, PUT, 삭제)에 대한 구문은 까다 롭습니다 .

그러나 HTTP 본문없이 HTTP POST 요청을 보내야한다고 가정 undefined하고 두 번째 매개 변수 로 전달해야합니다 .

구성 객체 ( https://github.com/axios/axios#request-config ) 의 정의에 따라를 data호출 할 때 필드 를 통해 HTTP 호출에서 HTTP 본문을 전달할 수 있지만 HTTP의 경우 axios.delete에는 DELETE 동사는 무시됩니다.

두 번째 매개 변수가 때때로 HTTP 본문이고 다른 시간에는 전체 config객체 가되는이 혼동 axios은 HTTP 규칙이 구현 된 방식 때문입니다. 때때로 HTTP 호출이 유효한 것으로 간주되기 위해 HTTP 본문이 필요하지 않습니다.


0

같은 문제가 발생했습니다 ... 사용자 지정 axios 인스턴스를 만들어 해결했습니다. 그리고 그것을 사용하여 인증 된 삭제 요청을합니다.

const token = localStorage.getItem('token');
const request = axios.create({
        headers: {
            Authorization: token
        }
    });

await request.delete('<your route>, { data: { <your data> }});

0

나는 작동하는 방법을 찾았습니다.

axios
      .delete(URL, {
        params: { id: 'IDDataBase'},
        headers: {
          token: 'TOKEN',
        },
      }) 
      .then(function (response) {
        
      })
      .catch(function (error) {
        console.log(error);
      });

나는 이것이 당신에게도 효과가 있기를 바랍니다.


0

나는 나를 위해 작동하지 않는 위의 모든 것을 시도했습니다. 나는 PUT ( 여기에서 영감을 얻었습니다 . URL 호출에서 삭제를 수행하도록 서버 측 로직을 변경했습니다. (django 나머지 프레임 워크 함수 재정의).

예 :

.put(`http://127.0.0.1:8006/api/updatetoken/20`, bayst)
      .then((response) => response.data)
      .catch((error) => { throw error.response.data; });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.