From b0a7465238cad49514433f3dcdb67beff9d0780d Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Fri, 9 Jul 2021 12:16:28 +0800 Subject: [PATCH] =?UTF-8?q?refactor(share):=20=E6=9B=B4=E6=96=B0=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=9C=B0=E5=9D=80=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/api/request.ts | 3 ++- shared/api/socket.ts | 5 +++-- shared/config.ts | 1 - shared/index.tsx | 1 + shared/manager/server.ts | 9 +++++++++ web/src/init.tsx | 13 ++++++++++++- web/webpack.config.ts | 7 +++++++ 7 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 shared/manager/server.ts diff --git a/shared/api/request.ts b/shared/api/request.ts index a9bc6f50..3c14415c 100644 --- a/shared/api/request.ts +++ b/shared/api/request.ts @@ -5,6 +5,7 @@ import _isNil from 'lodash/isNil'; import _isFunction from 'lodash/isFunction'; import { config } from '../config'; import { getErrorHook, tokenGetter } from '../manager/request'; +import { getServerUrl } from '../manager/server'; export type CommonRequestResult = | ({ @@ -22,7 +23,7 @@ class RequestError extends Error {} */ export function createRequest() { const ins = axios.create({ - baseURL: config.serverUrl, + baseURL: getServerUrl(), }); ins.interceptors.request.use(async (val) => { diff --git a/shared/api/socket.ts b/shared/api/socket.ts index c19866fd..1e7de345 100644 --- a/shared/api/socket.ts +++ b/shared/api/socket.ts @@ -1,11 +1,12 @@ import { io, Socket } from 'socket.io-client'; import { config } from '../config'; import _isNil from 'lodash/isNil'; +import { getServerUrl } from '../manager/server'; let socket: Socket; class SocketEventError extends Error { - name: 'SocketEventError'; + name = 'SocketEventError'; } type SocketEventRespones = @@ -55,7 +56,7 @@ export function createSocket(token: string): Promise { } return new Promise((resolve, reject) => { - socket = io(config.serverUrl, { + socket = io(getServerUrl(), { transports: ['websocket'], auth: { token, diff --git a/shared/config.ts b/shared/config.ts index d5481e45..8e18d921 100644 --- a/shared/config.ts +++ b/shared/config.ts @@ -3,7 +3,6 @@ */ export const config = { - serverUrl: 'http://127.0.0.1:11000', color: [ '#333333', '#2c3e50', diff --git a/shared/index.tsx b/shared/index.tsx index c48c534d..49af1973 100644 --- a/shared/index.tsx +++ b/shared/index.tsx @@ -26,6 +26,7 @@ export { useMountedState } from './hooks/useMountedState'; // manager export { getStorage, setStorage, useStorage } from './manager/storage'; export { setTokenGetter } from './manager/request'; +export { setServerUrl } from './manager/server'; // model export { loginWithEmail, registerWithEmail } from './model/user'; diff --git a/shared/manager/server.ts b/shared/manager/server.ts new file mode 100644 index 00000000..74de4578 --- /dev/null +++ b/shared/manager/server.ts @@ -0,0 +1,9 @@ +import { buildRegFn } from './buildRegFn'; + +/** + * 获取服务器地址相关逻辑 + */ +export const [getServerUrl, setServerUrl] = buildRegFn<() => string>( + 'serverUrl', + () => 'http://127.0.0.1:11000' +); diff --git a/web/src/init.tsx b/web/src/init.tsx index 424cb644..82c47cea 100644 --- a/web/src/init.tsx +++ b/web/src/init.tsx @@ -1,4 +1,9 @@ -import { buildStorage, setStorage, setTokenGetter } from 'pawchat-shared'; +import { + buildStorage, + setServerUrl, + setStorage, + setTokenGetter, +} from 'pawchat-shared'; import { getUserJWT } from './utils/jwt-helper'; const webStorage = buildStorage(window.localStorage); @@ -7,3 +12,9 @@ setStorage(() => webStorage); setTokenGetter(async () => { return await getUserJWT(); }); + +if (window.localStorage.getItem('serverUrl')) { + setServerUrl(() => window.localStorage.getItem('serverUrl')); +} else if (process.env.SERVER_URL) { + setServerUrl(() => process.env.SERVER_URL); +} diff --git a/web/webpack.config.ts b/web/webpack.config.ts index da73d9cb..c501d1f9 100644 --- a/web/webpack.config.ts +++ b/web/webpack.config.ts @@ -3,6 +3,7 @@ */ import type { Configuration, WebpackPluginInstance } from 'webpack'; +import { DefinePlugin } from 'webpack'; import type WebpackDevServer from 'webpack-dev-server'; import path from 'path'; import HtmlWebpackPlugin from 'html-webpack-plugin'; @@ -93,6 +94,12 @@ const config: Configuration = { extensions: ['.tsx', '.ts', '.js', '.css'], }, plugins: [ + new DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify(process.env.NODE_ENV), + SERVER_URL: JSON.stringify(process.env.SERVER_URL), + }, + }), new HtmlWebpackPlugin({ title: 'PawChat', inject: true,