项目初始化完成之后,准备开始进行项目的开发,首先配置好开发环境作为整个项目的基础
一、配置代理
1、config/proxy.ts配置代理
export default {
// 如果需要自定义本地开发服务器 请取消注释按需调整
dev: {
// localhost:8000/api/** -> https://preview.pro.ant.design/api/**
'/api/': {
// 要代理的地址
target: 'https://www.niech.cn:8080',
// 配置了这个可以从 http 代理到 https
// 依赖 origin 的功能可能需要这个,比如 cookie
changeOrigin: true,
},
}
}
2、src/services/ant-design-pro/api.ts改造原有login登录接口
/** 登录接口 POST /api/user/login */
export async function login(body: API.LoginParams, options?: { [key: string]: any }) {
return request<API.LoginResult>('/api/user/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
验证登录接口,请求成功,但是页面未跳转首页,这里需要检查代码,这里定位登录函数
const handleSubmit = async (values: API.LoginParams) => {
try {
// 登录
const msg = await login({ ...values, type });
if (msg.status === 'ok') {
const defaultLoginSuccessMessage = intl.formatMessage({
id: 'pages.login.success',
defaultMessage: '登录成功!',
});
message.success(defaultLoginSuccessMessage);
await fetchUserInfo();
const urlParams = new URL(window.location.href).searchParams;
history.push(urlParams.get('redirect') || '/');
return;
}
console.log(msg);
// 如果失败去设置用户错误信息
setUserLoginState(msg);
} catch (error) {
const defaultLoginFailureMessage = intl.formatMessage({
id: 'pages.login.failure',
defaultMessage: '登录失败,请重试!',
});
console.log(error);
message.error(defaultLoginFailureMessage);
}
};
我们自己登录接口的数据结构和模板略有不同,这里需要进行改造
const handleSubmit = async (values: API.LoginParams) => {
try {
// 登录
const res = await login({ ...values, type });
if (res.code === 200) {
localStorage.setItem('token',res.token);
const defaultLoginSuccessMessage = intl.formatMessage({
id: 'pages.login.success',
defaultMessage: '登录成功!',
});
message.success(defaultLoginSuccessMessage);
await fetchUserInfo();
const urlParams = new URL(window.location.href).searchParams;
history.push(urlParams.get('redirect') || '/');
return;
}
console.log(res);
// 如果失败去设置用户错误信息
setUserLoginState(res);
} catch (error) {
const defaultLoginFailureMessage = intl.formatMessage({
id: 'pages.login.failure',
defaultMessage: '登录失败,请重试!',
});
console.log(error);
message.error(defaultLoginFailureMessage);
}
};
const { code, type: loginType } = userLoginState;
3、src/services/ant-design-pro/api.ts改造原有获取用户信息接口
/** 获取当前的用户 GET /api/user/getUserInfo */
export async function currentUser(options?: { [key: string]: any }) {
return request<{
data: API.CurrentUser;
}>('/api/user/getUserInfo', {
method: 'GET',
...(options || {}),
});
}
4、src/requestErrorConfig.ts改造接口请求响应拦截器
// 请求拦截器
requestInterceptors: [
(config: any) => {
// 拦截请求配置,进行个性化处理。
if (localStorage.getItem('token')) {
config.headers['Authorization'] = localStorage.getItem('token') // 让每个请求携带自定义token 请根据实际情况自行修改
}
const url = config?.url;
return { ...config, url };
},
],
// 响应拦截器
responseInterceptors: [
(response) => {
console.log('response',response)
// 拦截响应数据,进行个性化处理
const { data } = response as unknown as ResponseStructure;
if (data.code === 401) {
message.error('登录状态已过期,请重新登录');
history.push('/user/login');
}else if (data.code === 403) {
message.error('暂无权限');
}else if (data.code === 500) {
message.error(data.msg);
}
return response;
},
],
至此登录初步功能调试完成