From 9d1757dba6d943dea684e8c244e9746df38f4937 Mon Sep 17 00:00:00 2001
From: zhengkunwang <31820853+zhengkunwang223@users.noreply.github.com>
Date: Sun, 5 Nov 2023 21:41:31 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20Node.js=20=E8=BF=90=E8=A1=8C=E7=8E=AF?=
 =?UTF-8?q?=E5=A2=83=E5=A4=96=E9=83=A8=E6=98=A0=E5=B0=84=E7=AB=AF=E5=8F=A3?=
 =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=A1=E9=AA=8C=20(#2808)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 backend/app/service/runtime.go                         | 10 ++++++++++
 .../src/views/website/runtime/node/operate/index.vue   |  4 ++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/backend/app/service/runtime.go b/backend/app/service/runtime.go
index dc2636c13..248bbf4f4 100644
--- a/backend/app/service/runtime.go
+++ b/backend/app/service/runtime.go
@@ -87,6 +87,11 @@ func (r *RuntimeService) Create(create request.RuntimeCreate) (err error) {
 		if err = checkPortExist(create.Port); err != nil {
 			return err
 		}
+		for _, export := range create.ExposedPorts {
+			if err = checkPortExist(export.HostPort); err != nil {
+				return err
+			}
+		}
 		if containerName, ok := create.Params["CONTAINER_NAME"]; ok {
 			if err := checkContainerName(containerName.(string)); err != nil {
 				return err
@@ -342,6 +347,11 @@ func (r *RuntimeService) Update(req request.RuntimeUpdate) error {
 			}
 			runtime.Port = req.Port
 		}
+		for _, export := range req.ExposedPorts {
+			if err = checkPortExist(export.HostPort); err != nil {
+				return err
+			}
+		}
 		if containerName, ok := req.Params["CONTAINER_NAME"]; ok {
 			envs, err := gotenv.Unmarshal(runtime.Env)
 			if err != nil {
diff --git a/frontend/src/views/website/runtime/node/operate/index.vue b/frontend/src/views/website/runtime/node/operate/index.vue
index 96cba9b9c..5f8dfdb2d 100644
--- a/frontend/src/views/website/runtime/node/operate/index.vue
+++ b/frontend/src/views/website/runtime/node/operate/index.vue
@@ -256,7 +256,6 @@ const rules = ref<any>({
         HOST_IP: [Rules.requiredSelect],
         EXEC_SCRIPT: [Rules.requiredSelect],
         CONTAINER_NAME: [Rules.requiredInput, Rules.containerName],
-        CUSTOM_SCRIPT: [Rules.requiredInput],
     },
 });
 const scripts = ref<Runtime.NodeScripts[]>([]);
@@ -456,7 +455,8 @@ const getRuntime = async (id: number) => {
         runtime.exposedPorts = data.exposedPorts || [];
         editParams.value = data.appParams;
         searchApp(data.appID);
-        if (data.params['CUSTOM_SCRIPT'] == '0') {
+        if (data.params['CUSTOM_SCRIPT'] == undefined || data.params['CUSTOM_SCRIPT'] == '0') {
+            data.params['CUSTOM_SCRIPT'] = '0';
             getScripts();
         }
         open.value = true;