मैं एपीआई परीक्षण में axios का उपयोग करना चाहता हूँ। क्लाइंट को इनिशियलाइज़ करने के लिए मुझे सबसे पहले ऑथ टोकन सेट करना होगा, जिसकी मुझे एक्सियोस के साथ भी उम्मीद है। इसे एसिंक कोड कैसे प्राप्त करें?

const a = require('axios');

  getToken = () => {
    var axios =a.create({
        baseURL: 'http://local.v2.app.com/api/auth/v1.0',
        headers: {'Content-Type': 'application/json'},
      });

      return axios.post('/credentials/login', {
        username: '1@test.com',
        password: 'Test@1234'
      })
      .then(function (response) {
        return response.data.data.token;
      })
      .catch(function (error) {
        console.log(error);
      });

  }

  const client=a.create({
    baseURL: 'http://local.v2.app.com/api/auth/v1.0',
    headers: {
        'Content-Type': 'application/json',
        'Authorization':  getToken()
},
  });

  module.exports = client; 
-1
ogbofjnr 7 जिंदा 2020, 01:07

1 उत्तर

सबसे पहले, getToken async होना चाहिए (या सिर्फ वापसी का वादा):

async getToken() {
    var axios = a.create({
        baseURL: 'http://local.v2.app.com/api/auth/v1.0',
        headers: {'Content-Type': 'application/json'},
      });

    try {
      const response = await axios.post('/credentials/login', {
        username: '1@test.com',
        password: 'Test@1234'
      })
      return response.data.data.token;
    } catch (error) {
      console.error(error);
    }
  }

फिर आप request का मजाक उड़ा सकते हैं:

const client = a.create({
  baseURL: 'http://local.v2.app.com/api/auth/v1.0',
  headers: {
    'Content-Type': 'application/json'
  }
})
const request = client.request

const addToken = (token) => (data, headers) => {
  headers.Authorization = token
  return data
}

client.request = (config = {}) => new Promise(async (resolve, reject) => {
  token = await getToken()
  if (!config.transformRequest) config.transformRequest = []
  config.transformRequest.push(addToken(token))
  request(config).then(resolve, reject)
})

module.exports = client

हाँ, थोड़ा गन्दा, बेझिझक रिफ्लेक्टर!

Axios में request फ़ंक्शन है जो अनुरोध करता है, अन्य जैसे get, post उपनाम हैं। यह कोड पैच पहले टोकन प्राप्त करने का अनुरोध करता है और फिर अनुरोध जारी रखता है।

ट्रांसफॉर्मरक्वेट को जिथब पर एक्सियस रीडमी से लिया गया है, एक टिप्पणी है "आप हेडर ऑब्जेक्ट को संशोधित कर सकते हैं" इसलिए यह कानूनी है।

पीएस अच्छा सवाल, पता नहीं क्यों -1

0
user2541867 7 जिंदा 2020, 01:40
क्या मैं सही समझता हूं, क्योंकि क्लाइंट.अनुरोध वादा है, मैं तुरंत इस क्लाइंट का उपयोग नहीं कर सकता, क्योंकि टोकन लोड नहीं हो सकता है? और इसे सिंक में उपयोग करने की आवश्यकता है या फिर भी, वास्तव में असुविधाजनक लगता है।
 – 
ogbofjnr
7 जिंदा 2020, 01:50
अरे, क्या आप एक वादे की तरह .request या .get या .post का उपयोग करने जा रहे हैं? मेरी धारणा में मेरे उत्तर को axios का उपयोग करके आगे के सामान्य तरीके को नहीं बदलना चाहिए।
 – 
user2541867
7 जिंदा 2020, 01:56
मैं इसे इस तरह इस्तेमाल करने की उम्मीद करता हूं const client = require('./client'); client.get('/demo/search')
 – 
ogbofjnr
7 जिंदा 2020, 02:10
और आपको प्रतिक्रिया कैसे मिलने वाली है?
 – 
user2541867
7 जिंदा 2020, 02:11
अनुमान है कि मुझे इसे सिंक प्रतीक्षा में उपयोग करने की आवश्यकता होगी
 – 
ogbofjnr
7 जिंदा 2020, 02:15