Axios Xóa yêu cầu với nội dung và tiêu đề?


105

Tôi đang sử dụng Axios trong khi lập trình trong ReactJS và tôi giả vờ gửi yêu cầu XÓA tới máy chủ của mình.

Để làm như vậy, tôi cần các tiêu đề:

headers: {
  'Authorization': ...
}

và cơ thể được cấu tạo bởi

var payload = {
    "username": ..
}

Tôi đã tìm kiếm trên các trang web khác nhau và chỉ thấy rằng phương thức DELETE yêu cầu một "tham số" và không chấp nhận "dữ liệu".

Tôi đã cố gắng gửi nó như vậy:

axios.delete(URL, payload, header);

hoặc thậm chí

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

Nhưng dường như không có gì hoạt động ...

Ai đó có thể cho tôi biết nếu có thể (tôi đoán là có) để gửi một yêu cầu XÓA với cả tiêu đề và nội dung không và làm thế nào để làm như vậy?

Cảm ơn bạn trước!

Câu trả lời:


128

Vì vậy, sau một số lần thử, tôi thấy nó hoạt động.

Vui lòng làm theo trình tự thứ tự, nó rất quan trọng nếu không nó sẽ không hoạt động

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

98

axiox.deletekhông hỗ trợ một cơ quan yêu cầu. Nó chấp nhận hai tham số: url và cấu hình tùy chọn. Bạn có thể sử dụng config.datađể đặt nội dung yêu cầu và tiêu đề như sau:

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

Xem tại đây - https://github.com/axios/axios/issues/897


Vấn đề là tôi muốn gửi một cơ thể và tiêu đề trong yêu cầu xóa cùng
Asfourhundred

75

Dưới đây là tóm tắt ngắn gọn về các định dạng cần thiết để gửi các động từ http khác nhau với tiên đề:

  • GET: Hai lối

    • Phương pháp đầu tiên

      axios.get('/user?ID=12345')
        .then(function (response) {
          // Do something
        })
      
    • Phương pháp thứ hai

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

    Hai cái trên là tương đương. Quan sát paramstừ khóa trong phương pháp thứ hai.

  • 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
    )
    

Key take aways

  • gettùy chọn yêu cầu cần một paramskhóa để thiết lập chính xác các tham số truy vấn
  • deleteyêu cầu với nội dung cần nó được đặt dưới một datakhóa

11
Câu trả lời của bạn khiến tôi ước có một tính năng +2 ủng hộ khi tràn ngăn xếp.
eli-bd

Đây là câu trả lời duy nhất giải thích nó một cách chi tiết. Cảm ơn nó thực sự giúp hiểu ngay cả những người khác.
Geoff

Làm cách nào để gửi yêu cầu xóa với params, không phải body?
MaFiA

Câu trả lời tốt nhất cho câu hỏi này. Cảm ơn bạn.
HartleySan

1
@MaFiA, nếu bạn muốn gửi yêu cầu xóa bằng các tham số. Bạn chỉ cần đặt nó vào url bằng cách sử dụng các chuỗi truy vấn
Van_Paitin

13

tiên đề. xóa được chuyển qua một url và một cấu hình tùy chọn .

axios.delete (url [, config])

Các trường có sẵn cho cấu hình có thể bao gồm các tiêu đề .

Điều này làm cho nó để lệnh gọi API có thể được viết như sau:

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

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

Điều này không hiệu quả với tôi ... Tôi có const headers = {'Authorization': ...}data = {'username': ...}kết thúc với axios.delete('http://...', {headers, data})nhưng máy chủ không thể truy cập các tiêu đề ...
Asfourh Hundred

Yêu cầu thoát ra từ trình duyệt cho biết khác. Xem Stackblitz này ( stackblitz.com/edit/react-gq1maa ) và cả yêu cầu trong tab mạng của trình duyệt ( snag.gy/JrAMjD.jpg ). Ở đây, bạn cần đảm bảo rằng bạn đang đọc phía máy chủ tiêu đề đúng cách hoặc yêu cầu không bị chặn và giả mạo.
Oluwafemi Sule

6

Tôi đã gặp vấn đề tương tự, tôi đã giải quyết nó như vậy:

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

5

Trên thực tế, axios.deletehỗ trợ một cơ quan yêu cầu.
Nó chấp nhận hai tham số: a URLvà một tùy chọn config. Đó là...

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

Bạn có thể làm như sau để đặt nội dung phản hồi cho yêu cầu xóa:

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)

Tôi hi vọng điêu nay se giup được ai đo!


1
Cảm ơn, tôi đang sử dụng phương thức này trong phương thức xóa nestJs HttpService của mình dưới dạng: this.httpService.delete (apiUrl, {headers: headersRequest, data: deleteBody})
shanti

4

Đối với Xóa, bạn sẽ cần thực hiện như sau

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

Nó đã làm việc cho tôi.


2

Để gửi HTTP DELETE với một số tiêu đề qua, axiostôi đã thực hiện như sau:

  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);

Các axioscú pháp cho động từ HTTP khác nhau (GET, POST, PUT, DELETE) là khó khăn bởi vì đôi khi các tham số thứ 2 được coi là cơ quan HTTP, một số thời điểm khác (khi nó có thể không cần thiết), bạn chỉ cần vượt qua các tiêu đề như tham số thứ 2 .

Tuy nhiên, giả sử bạn cần gửi một yêu cầu HTTP POST mà không có nội dung HTTP, thì bạn cần chuyển undefinedlàm tham số thứ hai.

Hãy nhớ rằng theo định nghĩa của đối tượng cấu hình ( https://github.com/axios/axios#request-config ), bạn vẫn có thể chuyển một phần thân HTTP trong lệnh gọi HTTP qua datatrường khi gọi axios.delete, tuy nhiên đối với HTTP DELETE động từ nó sẽ bị bỏ qua.

Sự nhầm lẫn này giữa tham số thứ 2 đôi khi là phần thân HTTP và một số trường hợp khác là toàn bộ configđối tượng axioslà do cách các quy tắc HTTP đã được triển khai. Đôi khi không cần nội dung HTTP để cuộc gọi HTTP được coi là hợp lệ.


0

Tôi gặp phải vấn đề tương tự ... Tôi đã giải quyết nó bằng cách tạo một phiên bản axios tùy chỉnh. và sử dụng nó để thực hiện một yêu cầu xóa đã xác thực ..

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

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

0

Tôi đã thử tất cả những cách trên mà không hiệu quả với tôi. Tôi đã kết thúc chỉ với PUT (nguồn cảm hứng được tìm thấy ở đây ) và chỉ cần thay đổi logic phía máy chủ của mình để thực hiện xóa cuộc gọi url này. (ghi đè chức năng khung phần còn lại django).

ví dụ

.put(`http://127.0.0.1:8006/api/updatetoken/20`, bayst)
      .then((response) => response.data)
      .catch((error) => { throw error.response.data; });

-1

tôi đã tìm thấy một cách hoạt động:

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

Tôi hy vọng công việc này cho bạn quá.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.