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


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

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