Làm cách nào để đặt tiêu đề và tùy chọn trong axios?


159

Tôi sử dụng Axios để thực hiện một bài đăng HTTP như thế này:

import axios from 'axios'
params = {'HTTP_CONTENT_LANGUAGE': self.language}
headers = {'header1': value}
axios.post(url, params, headers)

Điều này có đúng không? Hoặc tôi nên làm:

axios.post(url, params: params, headers: headers)

3
Tôi tự hỏi tại sao bạn chấp nhận một câu trả lời sai!
Sirwan Afifi

@SirwanAfifi Không có câu trả lời được chấp nhận cho câu hỏi này
Tessaracter

2
@Tessaracter Vào ngày 13 tháng 5 năm 2019, đã có một câu trả lời được chấp nhận với số điểm là -78. Nó đã được chăm sóc từ đó.
jkmartindale

@jkmartindale Thú vị
Tessaracter

Câu trả lời:


263

Có nhiều hướng khác nhau để làm điều đó:

  • Đối với một yêu cầu:

    let config = {
      headers: {
        header1: value,
      }
    }
    
    let data = {
      'HTTP_CONTENT_LANGUAGE': self.language
    }
    
    axios.post(URL, data, config).then(...)
    
  • Để đặt cấu hình toàn cầu mặc định:

    axios.defaults.headers.post['header1'] = 'value' // for POST requests
    axios.defaults.headers.common['header1'] = 'value' // for all requests
    
  • Để đặt làm mặc định trên ví dụ axios:

    let instance = axios.create({
      headers: {
        post: {        // can be common or any other method
          header1: 'value1'
        }
      }
    })
    
    //- or after instance has been created
    instance.defaults.headers.post['header1'] = 'value'
    
    //- or before a request is made
    // using Interceptors
    instance.interceptors.request.use(config => {
      config.headers.post['header1'] = 'value';
      return config;
    });
    

1
Tôi có thể yêu cầu bạn xem xét một axioscâu hỏi liên quan ở đây không: stackoverflow.com/questions/59470085/ mẹo ?
Istiaque Ahmed

141

Bạn có thể gửi yêu cầu nhận với Tiêu đề (để xác thực với jwt chẳng hạn):

axios.get('https://example.com/getSomething', {
 headers: {
   Authorization: 'Bearer ' + token //the token is a variable which holds the token
 }
})

Ngoài ra, bạn có thể gửi một yêu cầu bài.

axios.post('https://example.com/postSomething', {
 email: varEmail, //varEmail is a variable which holds the email
 password: varPassword
},
{
  headers: {
    Authorization: 'Bearer ' + varToken
  }
})

Cách làm của tôi là đặt một yêu cầu như thế này:

 axios({
  method: 'post', //you can set what request you want to be
  url: 'https://example.com/request',
  data: {id: varID},
  headers: {
    Authorization: 'Bearer ' + varToken
  }
})

1
Yêu cầu bài đăng thứ hai của bạn không cung cấp tiêu đề cụ thể, bạn có thể chỉnh sửa nó cho ví dụ đầy đủ không?
Sọc

bằng cách sử dụng datatrong interceptors.request => nó sẽ ghi đè lên phần thân máy tính của bạn từ cuộc gọi cụ thể mà chúng tôi đang sử dụng. Vì vậy, không được sử dụng trong trường hợp như vậy.
Anupam Maurya

Bạn có phải tuân theo tiêu chuẩn này 'Ủy quyền:' Người mang mã thông báo '+ hoặc bạn có thể làm điều gì đó như Auth: mã thông báo không? Tôi không sử dụng auth0 api nhưng tự làm trong nút, xin lỗi nếu câu hỏi ngu ngốc mới đối với jwt và công cụ bảo mật nói chung
Wiliam Cardoso

24

Bạn có thể truyền một đối tượng cấu hình cho các axios như:

axios({
  method: 'post',
  url: '....',
  params: {'HTTP_CONTENT_LANGUAGE': self.language},
  headers: {'header1': value}
})

16

Đây là một ví dụ đơn giản về cấu hình với các tiêu đề và answerType:

var config = {
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  responseType: 'blob'
};

axios.post('http://YOUR_URL', this.data, config)
  .then((response) => {
  console.log(response.data);
});

Kiểu nội dung có thể là 'application / x-www-form-urlencoding' hoặc 'application / json' và nó cũng có thể hoạt động 'application / json; charset = utf-8'

answerType có thể là 'Arraybuffer', 'blob', 'document', 'json', 'text', 'stream'

Trong ví dụ này, this.data là dữ liệu bạn muốn gửi. Nó có thể là một giá trị hoặc một mảng. (Nếu bạn muốn gửi một đối tượng, có lẽ bạn sẽ phải tuần tự hóa nó)


Bạn có thể giải thích sự khác biệt giữa cài đặt các tiêu đề với từ khóa không có cấu hình của chúng tôi không?
bong bóng

1
Sử dụng biến cấu hình sẽ tạo ra một mã dễ đọc hơn và dễ đọc hơn; không có gì khác @ bubble-cord
gtamborero


10

Bạn có thể khởi tạo một tiêu đề mặc định axios.defaults.headers

 axios.defaults.headers = {
        'Content-Type': 'application/json',
        Authorization: 'myspecialpassword'
    }

   axios.post('https://myapi.com', { data: "hello world" })
        .then(response => {
            console.log('Response', response.data)
        })
        .catch(e => {
            console.log('Error: ', e.response.data)
        })

9

nếu bạn muốn thực hiện một yêu cầu nhận với thông số và tiêu đề.

var params = {
  paramName1: paramValue1,
  paramName2: paramValue2
}

var headers = {
  headerName1: headerValue1,
  headerName2: headerValue2
}

 Axios.get(url, {params, headers} ).then(res =>{
  console.log(res.data.representation);
});


2

thử mã này

trong ví dụ mã sử dụng axios nhận API nghỉ ngơi.

gắn kết

  mounted(){
    var config = {
    headers: { 
      'x-rapidapi-host': 'covid-19-coronavirus-statistics.p.rapidapi.com',
      'x-rapidapi-key': '5156f83861mshd5c5731412d4c5fp18132ejsn8ae65e661a54' 
      }
   };
   axios.get('https://covid-19-coronavirus-statistics.p.rapidapi.com/v1/stats? 
    country=Thailand',  config)
    .then((response) => {
    console.log(response.data);
  });
}

Hy vọng là giúp đỡ.


2

Tôi đã phải đối mặt với vấn đề này trong bài yêu cầu . Tôi đã thay đổi như thế này trong tiêu đề axios. Nó hoạt động tốt.

axios.post('http://localhost/M-Experience/resources/GETrends.php',
      {
        firstName: this.name
      },
      {
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
      });

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.