【发布时间】:2018-08-13 07:12:50
【问题描述】:
我正在尝试在我的 API 之上实现抽象。我需要一个 axios 客户端实例,以便在稍后阶段拦截请求。使用下面的代码,我尝试重用相同的实例。当我在视图层中导入函数(即身份验证)时,下面的代码是否保证只有一个 axios 客户端?如果有,为什么?
index.ts
import axios from 'axios'
export const baseUrl = 'http://localhost:8080';
export const axiosClient = axios.create();
session.ts
import {axiosClient, baseUrl} from './index'
import {User} from "../_models/user";
interface AuthenticateResponse {
token: string,
user: User
}
export function authenticate(username: string, password: string) :Promise<User> {
let formData = new FormData();
formData.set('username', username);
formData.set('password', password);
return axiosClient.post(baseUrl + '/login', formData)
.then(resp => {
let authResp: AuthenticateResponse = JSON.parse(resp.data);
localStorage.setItem('token', authResp.token);
return authResp.user
})
}
【问题讨论】:
-
你导出的就是你得到的——在你的情况下,你导出一个对象的实例,该实例在所有其他导入中都是相同的实例(所以是一个单例)。其他选择是导出一个创建对象的函数,这样你就可以避免单例,但你必须在每次导入后创建实例,因为你要导入“工厂”。
标签: javascript typescript singleton