วิธีการตั้งค่าส่วนหัวและตัวเลือกใน axios?


160

ฉันใช้ Axios เพื่อโพสต์ HTTP แบบนี้:

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

ถูกต้องหรือไม่ หรือฉันควรทำ:

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

3
ฉันสงสัยว่าทำไมคุณถึงยอมรับคำตอบที่ผิด!
Sirwan Afifi

@SirwanAfifi ไม่มีคำตอบที่ยอมรับได้สำหรับคำถามนี้
Tessaracter

2
@Tessaracter เมื่อวันที่ 13 พฤษภาคม 2019 มีคำตอบที่ยอมรับด้วยคะแนน -78 มันได้รับการดูแลตั้งแต่นั้นมา
jkmartindale

@jkmartindale ที่น่าสนใจ
Tessaracter

คำตอบ:


265

มีหลายวิธีในการทำสิ่งนี้:

  • สำหรับคำขอเดียว:

    let config = {
      headers: {
        header1: value,
      }
    }
    
    let data = {
      'HTTP_CONTENT_LANGUAGE': self.language
    }
    
    axios.post(URL, data, config).then(...)
  • สำหรับการตั้งค่าการกำหนดค่าส่วนกลางเริ่มต้น:

    axios.defaults.headers.post['header1'] = 'value' // for POST requests
    axios.defaults.headers.common['header1'] = 'value' // for all requests
  • สำหรับการตั้งค่าเป็นค่าเริ่มต้นบนอินสแตนซ์ 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
ฉันขอให้คุณดูaxiosคำถามที่เกี่ยวข้องได้ที่นี่: stackoverflow.com/questions/59470085/… ?
Istiaque Ahmed

141

คุณสามารถส่งคำขอรับกับส่วนหัว (สำหรับการตรวจสอบกับ jwt เป็นต้น):

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

นอกจากนี้คุณสามารถส่งคำขอโพสต์

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

วิธีของฉันในการทำคือตั้งคำขอเช่นนี้:

 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
คำขอโพสต์ที่สองของคุณไม่มีส่วนหัวที่เฉพาะเจาะจงคุณสามารถแก้ไขเป็นตัวอย่างทั้งหมดได้หรือไม่
ลาย

โดยใช้dataใน interceptors.request => มันจะแทนที่ส่วนของร่างกาย actuall ของคุณจากการโทรเฉพาะที่เราใช้ ดังนั้นจึงไม่ได้ใช้ในกรณีดังกล่าว
Anupam Maurya

คุณต้องทำตาม 'การอนุญาต:' ผู้ถือ '+ โทเค็นมาตรฐานนี้หรือคุณสามารถทำสิ่งที่ชอบ Auth: โทเค็นได้หรือไม่ ฉันไม่ได้ใช้ auth0 api แต่ทำด้วยตัวเองในโหนดขออภัยถ้าคำถามโง่ ๆ ที่ใหม่สำหรับ jwt และสิ่งที่เกี่ยวกับความปลอดภัยโดยทั่วไป
Wiliam Cardoso

24

คุณสามารถส่งผ่านวัตถุการกำหนดค่าไปยัง axios เช่น:

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

16

นี่เป็นตัวอย่างง่ายๆของการกำหนดค่าด้วยส่วนหัวและ responseType:

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

Content-Type สามารถเป็น 'application / x-www-form-urlencoded' หรือ 'application / json' และอาจใช้งานได้เช่น 'application / json; charset = utf-8'

responseType สามารถเป็น 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'

ในตัวอย่างนี้ this.data เป็นข้อมูลที่คุณต้องการส่ง มันสามารถเป็นค่าหรืออาร์เรย์ (ถ้าคุณต้องการส่งวัตถุคุณอาจต้องทำให้เป็นอันดับ)


คุณสามารถอธิบายความแตกต่างระหว่างการตั้งค่าส่วนหัวด้วยคำหลักที่ไม่มีคำว่า config ได้หรือไม่?
สายฟอง

1
การใช้ตัวแปร config สร้างโค้ดที่ดีกว่าและอ่านได้ง่ายขึ้น ไม่มีอะไรอื่น @ bubble-cord
gtamborero


10

คุณสามารถเริ่มต้นส่วนหัวเริ่มต้น 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

ถ้าคุณต้องการที่จะรับคำขอกับ params และส่วนหัว

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

ลองรหัสนี้

ในตัวอย่างรหัสใช้ axios รับ API ที่เหลือ

ในเมานท์

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

ความหวังคือความช่วยเหลือ


2

ฉันต้องเผชิญกับปัญหานี้ในการโพสต์การร้องขอ ฉันมีการเปลี่ยนแปลงเช่นนี้ในส่วนหัว axios มันใช้งานได้ดี

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.