[英]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.