gpt4 book ai didi

javascript - 如何使用静态方法将身份验证 token 传递给 API 类

转载 作者:行者123 更新时间:2023-12-01 00:43:01 26 4
gpt4 key购买 nike

我编写了一个 API ,将其与 redux saga 一起使用,以将实际的网络调用与 sagas 分开,该类看起来有点像这样:

    export default class ApiService {

constructor(bearer) {
this.instance = axios.create({
...
headers: {
'Authorization': `Bearer ${bearer}`
}
})
}

fetchPosts = async () => {
const response = this.instance.get(.....)
}
........
}

但是在我的传奇中,我每次都必须在传奇中实例化一个新对象,如下所示:

    const { accessToken } = yield select(getAuth)
const apiService = new ApiService(accessToken);

我是否可以采取更好的方法,以便我可以从每个 saga 调用中删除这两行代码,并仍然确保该对象将具有正确的不记名 token ?

谢谢?

最佳答案

尝试创建一个仅在第一次调用或 token 更新时才返回新 API 服务的函数。

api.js

let api;
let token;

const isNewToken = (newToken) => newToken !== token;
const getApi = (newToken) => {
const isTokenUpdated = newToken !== token;
const shouldCreateService = !api || isTokenUpdated;

if (shouldCreateService) {
api = new ApiService(newToken);
}

return api;
}

export { getApi };

然后创建一些辅助生成器

function* retrieveToken() {
return yield select(getAuth);
}

function* resolveApi() {
const token = yield retrieveToken();
return getApi(token); // getApi from api.js
}

然后在你的主要传奇中你可以像这样使用它:

function* fetchPostsSaga() {
const api = yield resolveApi();
// Rest of code using api
...
}
<小时/>

由于授权 token 存储在 Redux State 中,ApiService 的创建将绑定(bind)到 Redux 生命周期。如果可能的话,我会将 token 的检索移到Redux之外。

关于javascript - 如何使用静态方法将身份验证 token 传递给 API 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57578523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com