繁体   English   中英

如何在 node.js 中使用 axios 设置授权令牌

[英]How to set Authorization token with axios in node.js

我想在 api 测试中使用 axios。 要初始化客户端,我首先需要设置身份验证令牌,我也希望使用 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; 

首先, getToken 应该是异步的(或者只是返回承诺):

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 是别名。 此代码修补请求以先获取令牌,然后继续请求。

transformRequest 取自 github 上的 axious 自述文件,有一条评论“您可以修改标头对象”,因此它是合法的。

PS好问题,不知道为什么-1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM