server.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import axios from 'axios';
  2. let baseURL: string;
  3. if (process.env.NODE_ENV === 'production') {
  4. baseURL = '';
  5. } else {
  6. baseURL = process.env.NEXT_PUBLIC_DEV_BASE_URL as string;
  7. }
  8. // 拦截器
  9. axios.interceptors.response.use(
  10. (response) => {
  11. return response;
  12. },
  13. (error) => {
  14. return Promise.reject(error);
  15. }
  16. );
  17. axios.interceptors.request.use(
  18. (config) => {
  19. config.headers['Accept'] = 'application/json';
  20. config.baseURL = baseURL;
  21. // config.timeout = 10000;
  22. return config;
  23. },
  24. (error) => {
  25. return Promise.reject(error);
  26. }
  27. );
  28. export function requests<T>(
  29. url: string,
  30. option: {
  31. method: 'post' | 'get' | 'put' | 'delete';
  32. params?: { [key: string]: any };
  33. data?: { [key: string]: any };
  34. headers?: { [key: string]: any };
  35. requestType?: 'json' | 'form';
  36. timeout?: number;
  37. }
  38. ) {
  39. if (!option.requestType) {
  40. option.requestType = 'json';
  41. }
  42. return new Promise<T>((resolve, reject) => {
  43. const Content_Type =
  44. option.requestType == 'json'
  45. ? 'application/json;charset=UTF-8'
  46. : 'application/x-www-form-urlencoded;charset=UTF-8';
  47. axios<T>({
  48. timeout: option.timeout,
  49. url: baseURL + url,
  50. method: option.method,
  51. params: option.params,
  52. data: option.data,
  53. headers: {
  54. 'Content-Type': Content_Type,
  55. ...option.headers
  56. }
  57. })
  58. .then((res) => {
  59. resolve(res.data);
  60. })
  61. .catch((err) => {
  62. reject(err);
  63. });
  64. });
  65. }
  66. export default requests;