You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by ju...@apache.org on 2020/06/04 04:25:56 UTC
[incubator-apisix-dashboard] 01/01: feat: update upstream
This is an automated email from the ASF dual-hosted git repository.
juzhiyuan pushed a commit to branch fix-upstream
in repository https://gitbox.apache.org/repos/asf/incubator-apisix-dashboard.git
commit cc452260e9d7e4a1bb4f063999ad03da47f6587a
Author: juzhiyuan <jj...@gmail.com>
AuthorDate: Thu Jun 4 12:25:31 2020 +0800
feat: update upstream
---
src/pages/Routes/Create.tsx | 2 +-
.../Routes/components/Step2/RequestRewriteView.tsx | 28 ++++++++++++++++------
src/pages/Routes/constants.ts | 11 +++++----
src/pages/Routes/transform.ts | 26 +++++++++++++-------
src/pages/Routes/typing.d.ts | 21 +++++++---------
5 files changed, 53 insertions(+), 35 deletions(-)
diff --git a/src/pages/Routes/Create.tsx b/src/pages/Routes/Create.tsx
index 3196fc3..035f09b 100644
--- a/src/pages/Routes/Create.tsx
+++ b/src/pages/Routes/Create.tsx
@@ -33,7 +33,7 @@ const Create: React.FC = (props) => {
const initRoute = (rid: number) => {
fetchRoute(rid).then((data) => {
form1.setFieldsValue(data.step1Data);
- setStep1Data(data.step1Data);
+ setStep1Data(data.step1Data as RouteModule.Step1Data);
form2.setFieldsValue(data.step2Data);
setStep2Data(data.step2Data);
diff --git a/src/pages/Routes/components/Step2/RequestRewriteView.tsx b/src/pages/Routes/components/Step2/RequestRewriteView.tsx
index dc31a1c..3c622e2 100644
--- a/src/pages/Routes/components/Step2/RequestRewriteView.tsx
+++ b/src/pages/Routes/components/Step2/RequestRewriteView.tsx
@@ -105,19 +105,33 @@ const RequestRewriteView: React.FC<Props> = ({ data, form, disabled, onChange })
rules={[{ required: true, message: '请勾选协议' }]}
>
<Radio.Group onChange={onProtocolChange} name="upstreamProtocol" disabled={disabled}>
- <Radio value="original">原始请求</Radio>
+ <Radio value="keep">保持原样</Radio>
<Radio value="http">HTTP</Radio>
<Radio value="https">HTTPS</Radio>
</Radio.Group>
</Form.Item>
{renderUpstreamMeta()}
- <Form.Item
- label="请求路径"
- name="upstreamPath"
- rules={[{ required: true, message: '请输入请求路径' }]}
- >
- <Input disabled={disabled} />
+ <Form.Item label="请求路径">
+ <Radio.Group
+ defaultValue={step2Data.upstreamPath === undefined ? 'keep' : 'modify'}
+ onChange={(e) => {
+ onChange({ upstreamPath: e.target.value === 'keep' ? undefined : '' });
+ }}
+ disabled={disabled}
+ >
+ <Radio value="keep">保持原样</Radio>
+ <Radio value="modify">修改</Radio>
+ </Radio.Group>
</Form.Item>
+ {step2Data.upstreamPath !== undefined && (
+ <Form.Item
+ label="新路径"
+ name="upstreamPath"
+ rules={[{ required: true, message: '请输入请求路径' }]}
+ >
+ <Input disabled={disabled} />
+ </Form.Item>
+ )}
<Form.Item label="连接超时" required>
<Form.Item
name={['timeout', 'connect']}
diff --git a/src/pages/Routes/constants.ts b/src/pages/Routes/constants.ts
index fade6a1..b943542 100644
--- a/src/pages/Routes/constants.ts
+++ b/src/pages/Routes/constants.ts
@@ -38,14 +38,15 @@ export const DEFAULT_STEP_1_DATA: RouteModule.Step1Data = {
};
export const DEFAULT_STEP_2_DATA: RouteModule.Step2Data = {
- upstreamProtocol: 'original',
+ upstreamProtocol: 'keep',
+ // TODO: 展示 placeholder
upstreamHostList: [{ host: '', port: 80, weight: 0 }],
upstreamHeaderList: [],
- upstreamPath: '',
+ upstreamPath: undefined,
timeout: {
- connect: 30000,
- send: 30000,
- read: 30000,
+ connect: 10000,
+ send: 10000,
+ read: 10000,
},
};
diff --git a/src/pages/Routes/transform.ts b/src/pages/Routes/transform.ts
index 0842978..4000ffd 100644
--- a/src/pages/Routes/transform.ts
+++ b/src/pages/Routes/transform.ts
@@ -30,7 +30,7 @@ export const transformStepData = ({
protocols = protocols.concat('websocket');
}
- const data: RouteModule.Body = {
+ const data: Partial<RouteModule.Body> = {
...step1Data,
...step2Data,
...step3Data,
@@ -59,11 +59,14 @@ export const transformStepData = ({
timeout: step2Data.timeout,
},
upstream_header,
- upstream_path: {
- to: step2Data.upstreamPath,
- },
};
+ if (step2Data.upstreamPath) {
+ data.upstream_path = {
+ to: step2Data.upstreamPath,
+ };
+ }
+
return omit(data, [
'advancedMatchingRules',
'upstreamProtocol',
@@ -102,10 +105,9 @@ const transformUpstreamNodes = (nodes: { [key: string]: number }): RouteModule.U
};
export const transformRouteData = (data: RouteModule.Body) => {
- const { name, desc, methods, uris, protocols, hosts, vars } = data;
- // TODO: redirect
+ const { name, desc, methods, uris, protocols, hosts, vars, redirect } = data;
- const step1Data: RouteModule.Step1Data = {
+ const step1Data: Partial<RouteModule.Step1Data> = {
name,
desc,
protocols: protocols.filter((item) => item !== 'websocket'),
@@ -114,8 +116,15 @@ export const transformRouteData = (data: RouteModule.Body) => {
paths: uris,
methods,
advancedMatchingRules: transformVarsToRules(vars),
+ redirect: Boolean(redirect),
+ forceHttps: Boolean(redirect.redirect_to_https),
};
+ if (redirect.code) {
+ step1Data.redirectCode = redirect.code;
+ step1Data.redirectURI = redirect.uri;
+ }
+
const { upstream, upstream_path, upstream_header } = data;
const upstreamHeaderList = Object.entries(upstream_header).map(([k, v]) => {
@@ -123,8 +132,7 @@ export const transformRouteData = (data: RouteModule.Body) => {
});
const step2Data: RouteModule.Step2Data = {
- // TODO: API
- upstreamProtocol: 'original',
+ upstreamProtocol: 'keep',
upstreamHeaderList,
upstreamHostList: transformUpstreamNodes(upstream.nodes),
upstreamPath: upstream_path.to,
diff --git a/src/pages/Routes/typing.d.ts b/src/pages/Routes/typing.d.ts
index 5024e20..5f513ba 100644
--- a/src/pages/Routes/typing.d.ts
+++ b/src/pages/Routes/typing.d.ts
@@ -25,7 +25,7 @@ declare namespace RouteModule {
redirect: boolean;
forceHttps: boolean;
redirectURI?: string;
- redirectCode?: boolean;
+ redirectCode?: number;
advancedMatchingRules: MatchingRule[];
};
@@ -61,9 +61,9 @@ declare namespace RouteModule {
}
type Step2Data = {
- upstreamProtocol: 'http' | 'https' | 'original';
+ upstreamProtocol: 'http' | 'https' | 'keep';
upstreamHostList: UpstreamHost[];
- upstreamPath: string;
+ upstreamPath: string | undefined;
upstreamHeaderList: UpstreamHeader[];
timeout: {
connect: number;
@@ -74,16 +74,11 @@ declare namespace RouteModule {
type ModalType = 'CREATE' | 'EDIT';
- type Redirect =
- | {
- redirect_to_https: boolean;
- code: 301 | 302;
- uri: string;
- }
- | {
- redirect_to_https: boolean;
- }
- | {};
+ type Redirect = {
+ code?: number;
+ uri?: string;
+ redirect_to_https?: boolean;
+ };
// Request Body or Response Data for API
type Body = {