เอกสารนี้แปลโดย AI สำหรับข้อมูลที่ถูกต้อง กรุณาดูเวอร์ชันภาษาอังกฤษ
โหนดสคริปต์ JavaScript อนุญาตให้ผู้ใช้รันสคริปต์ JavaScript ฝั่งเซิร์ฟเวอร์ที่กำหนดเองภายในเวิร์กโฟลว์ได้ครับ ในสคริปต์สามารถใช้ตัวแปรจากต้นน้ำของกระบวนการเป็นพารามิเตอร์ และสามารถนำค่าที่ส่งกลับจากสคริปต์ไปให้โหนดปลายน้ำใช้งานได้ครับ
สคริปต์จะทำงานในเวิร์กเกอร์เธรด (worker thread) บนฝั่งเซิร์ฟเวอร์ของแอปพลิเคชัน NocoBase และรองรับคุณสมบัติส่วนใหญ่ของ Node.js แต่ยังคงมีความแตกต่างบางประการจากสภาพแวดล้อมการรันแบบดั้งเดิม (native) โปรดดูรายละเอียดใน รายการคุณสมบัติ ครับ
ในอินเทอร์เฟซการกำหนดค่าเวิร์กโฟลว์ ให้คลิกปุ่มเครื่องหมายบวก (“+”) ในกระบวนการ เพื่อเพิ่มโหนด “JavaScript” ครับ:


ใช้สำหรับส่งตัวแปรจากบริบทของเวิร์กโฟลว์หรือค่าคงที่เข้าไปในสคริปต์ เพื่อให้ตรรกะของโค้ดในสคริปต์ใช้งาน โดยที่ name คือชื่อพารามิเตอร์ ซึ่งจะถูกใช้เป็นชื่อตัวแปรเมื่อส่งเข้าไปในสคริปต์ และ value คือค่าพารามิเตอร์ ซึ่งสามารถเลือกตัวแปรหรือกรอกค่าคงที่ได้ครับ
เนื้อหาสคริปต์สามารถมองว่าเป็นฟังก์ชันหนึ่ง โดยสามารถเขียนโค้ด JavaScript ใดๆ ที่รองรับในสภาพแวดล้อม Node.js และสามารถใช้คำสั่ง return เพื่อส่งกลับค่าเป็นผลลัพธ์การรันของโหนด เพื่อให้โหนดถัดไปนำไปใช้เป็นตัวแปรได้ครับ
หลังจากเขียนโค้ดแล้ว สามารถคลิกปุ่มทดสอบที่อยู่ด้านล่างกล่องแก้ไขเพื่อเปิดไดอะล็อกการทดสอบการรัน โดยใช้ค่าคงที่กรอกในพารามิเตอร์เพื่อจำลองการรัน หลังจากรันแล้วจะสามารถเห็นค่าที่ส่งกลับและเนื้อหาเอาต์พุต (ล็อก) ในไดอะล็อกได้ครับ

หน่วยเป็นมิลลิวินาที เมื่อตั้งค่าเป็น 0 หมายถึงไม่มีการตั้งค่าการหมดเวลาครับ
เมื่อเลือกแล้ว หากสคริปต์เกิดข้อผิดพลาดหรือเกิดข้อผิดพลาดจากการหมดเวลา โหนดถัดไปจะยังคงทำงานต่อไปครับ
หากสคริปต์เกิดข้อผิดพลาดจะไม่มีค่าส่งกลับ และผลลัพธ์ของโหนดจะถูกเติมด้วยข้อมูลข้อผิดพลาด หากมีการใช้ตัวแปรผลลัพธ์ของโหนดสคริปต์ในโหนดถัดไป โปรดจัดการด้วยความระมัดระวังครับ
ตรงกับเวอร์ชัน Node.js ที่แอปพลิเคชันหลักรันอยู่ครับ
สามารถใช้โมดูลในสคริปต์ได้อย่างจำกัด ซึ่งสอดคล้องกับ CommonJS โดยใช้คำสั่ง require() ในโค้ดเพื่อนำเข้าโมดูลครับ
รองรับโมดูลดั้งเดิมของ Node.js และโมดูลที่ติดตั้งใน node_modules (รวมถึงแพ็กเกจที่ NocoBase ใช้งานอยู่แล้ว) โมดูลที่ต้องการให้โค้ดใช้งานได้ต้องประกาศในตัวแปรสภาพแวดล้อมของแอปพลิเคชัน WORKFLOW_SCRIPT_MODULES โดยแยกชื่อแพ็กเกจด้วยเครื่องหมายจุลภาค เช่น:
โมดูลที่ไม่ได้ประกาศในตัวแปรสภาพแวดล้อม WORKFLOW_SCRIPT_MODULES แม้จะเป็นโมดูลดั้งเดิมของ Node.js หรือติดตั้งใน node_modules แล้ว ก็ไม่สามารถใช้งานในสคริปต์ได้ครับ นโยบายนี้สามารถใช้เพื่อควบคุมรายการโมดูลที่ผู้ใช้สามารถใช้งานได้ในระดับการดำเนินงาน เพื่อหลีกเลี่ยงไม่ให้สคริปต์มีสิทธิ์สูงเกินไปในบางสถานการณ์ครับ
ในสภาพแวดล้อมที่ไม่ได้ปรับใช้ด้วยซอร์สโค้ด หากโมดูลบางอย่างไม่ได้ติดตั้งใน node_modules คุณสามารถติดตั้งแพ็กเกจที่ต้องการลงในไดเรกทอรี storage ได้ด้วยตนเอง ตัวอย่างเช่น เมื่อต้องการใช้แพ็กเกจ exceljs สามารถดำเนินการดังนี้ครับ:
จากนั้นเพิ่มเส้นทางสัมพัทธ์ (หรือเส้นทางสัมบูรณ์) ของแพ็กเกจนั้นตาม CWD (ไดเรกทอรีทำงานปัจจุบัน) ของแอปพลิเคชันลงในตัวแปรสภาพแวดล้อม WORKFLOW_SCRIPT_MODULES:
จากนั้นจะสามารถใช้แพ็กเกจ exceljs ในสคริปต์ได้ (ชื่อใน require ต้องตรงกับที่กำหนดในตัวแปรสภาพแวดล้อมทุกประการ) ครับ:
ไม่รองรับ ตัวแปรโกลบอล เช่น global, process, __dirname และ __filename เป็นต้นครับ
พารามิเตอร์ที่กำหนดค่าในโหนดจะถูกใช้เป็นตัวแปรโกลบอลในสคริปต์และสามารถใช้งานได้โดยตรง พารามิเตอร์ที่ส่งเข้าสคริปต์รองรับเฉพาะประเภทพื้นฐาน เช่น boolean, number, string, object และอาเรย์ ออบเจกต์ Date จะถูกแปลงเป็นสตริงรูปแบบ ISO เมื่อส่งเข้าไป ประเภทที่ซับซ้อนอื่นๆ ไม่สามารถส่งผ่านได้โดยตรง เช่น อินสแตนซ์ของคลาสที่กำหนดเอง เป็นต้นครับ
สามารถส่งกลับข้อมูลประเภทพื้นฐาน (ตามกฎเดียวกับพารามิเตอร์) กลับไปยังโหนดเป็นผลลัพธ์ผ่านคำสั่ง return หากไม่มีการเรียกใช้คำสั่ง return ในโค้ด โหนดจะไม่มีค่าส่งกลับจากการรันครับ
รองรับ การใช้ console เพื่อเอาต์พุตล็อกครับ
เมื่อเวิร์กโฟลว์ทำงาน เอาต์พุตของโหนดสคริปต์จะถูกบันทึกลงในไฟล์ล็อกของเวิร์กโฟลว์ที่เกี่ยวข้องด้วยครับ
รองรับ การใช้ async เพื่อกำหนดฟังก์ชันอะซิงโครนัส และ await เพื่อเรียกใช้ฟังก์ชันอะซิงโครนัส รองรับ การใช้โกลบอลออบเจกต์ Promise ครับ
หากต้องการใช้เมธอด เช่น setTimeout, setInterval หรือ setImmediate จำเป็นต้องนำเข้าผ่านแพ็กเกจ timers ของ Node.js ครับ