Function Node¶
‘Function’ คือ โหนดที่จะใช้ในการเปลี่ยนแปลงหรือแก้ไขข้อมูลหรือข้อความที่ถูกส่งเข้ามาภายในโหนดนี้ผ่านการเขียนโปรแกรมในภาษา JavaScript ซึ่งข้อความนั้นมักจะถูกบรรจุมาในตัวแปรที่ชื่อ msg และภายในตัวแปรนี้ก็มักจะมี payload ซึ่งเป็นค่าข้อมูลหลักที่จะถูกนำมาใช้งานเสมอ โดยผู้ใช้งานสามารถเข้าถึงค่านี้ได้โดยการเรียกผ่านตัวแปรหลักว่า msg.payload
การเขียนฟังก์ชัน¶
โปรแกรมที่ถูกเขียนบรรจุเข้าไปในโหนดนี้จะถูกเรียกว่า body ซึ่งโดยพื้นฐานแล้ว โหนดนี้ได้เขียนโปรแกรมขั้นต้นเอาไว้ดังตัวอย่างของชุดคำสั่งนี้
return msg;
ชุดคำสั่งเริ่มต้นนี้จะทำการรับค่าข้อมูลที่เข้ามาภายในโหนดแล้วส่งต่อออกไปโดยไม่ได้เปลี่ยนแปลงค่าใด ๆ ค่าข้อมูลอย่างไรก็ออกไปอย่างนั้น ฉะนั้นหากโหนดนี้ส่งค่า null ออกไปจากโหนด นั่นหมายถึงไม่มีค่าข้อมูลใด ๆ ส่งผ่านเข้ามาในโหนดนี้ โหนดฟังก์ชันนั้นจำเป็นต้องส่งค่า msg ออกมาเสมอ อย่างไรก็ดี ผู้ใช้งานสามารถเปลี่ยนแปลงหรือแก้ไขข้อมูลเหล่านั้นก่อนที่จะส่งต่อไปให้ยังโหนดอื่น ๆ ได้ โดยสุดท้ายแล้วข้อความที่ออกไปนั้นไม่จำเป็นต้องเป็นค่าเดียวกันกับค่าที่เข้ามาภายในโหนดเลยด้วยซ้ำ นั่นหมายถึงอ็อบเจกต์ที่เข้ามาภายในโหนดนี้อาจจะมีค่าคุณสมบัติภายในที่แตกต่างจากอ็อบเจกต์สุดท้ายที่ถูกสร้างขึ้นมาภายในโหนดฟังก์ชัน
var newMsg = { payload: msg.payload.length }
return newMsg;
สิ่งเดียวที่ผู้ใช้งานควรระวังในการเปลี่ยนแปลงค่าข้อมูลเมื่อจะส่งออกไปคือ มันอาจเป็นการทำลายบางโฟลว์ให้มีข้อผิดพลาดเกิดขึ้นได้ ฉะนั้นแล้วโหนดฟังก์ชันจึงควรจะส่งค่าข้อมูลที่มีตัวแปรเดิมออกไปจากโหนดฟังก์ชันนี้ด้วย
ส่งออกข้อมูลหลายค่าในครั้งเดียว¶
โหนดฟังก์ชันนั้นนอกเหนือจากจะสามารถเปลี่ยนแปลงค่าข้อมูลที่ไหลผ่านเข้ามาได้แล้วนั้น ยังสามารถส่งค่าข้อมูลออกจากโหนดนี้ได้มากกว่าหนึ่งค่าอีกด้วย ซึ่งจำนวนข้อมูลที่ผู้ใช้งานต้องการให้ส่งออกไป สามารถตั้งค่าได้ที่โดยการเปิดหน้าการตั้งค่า ของโหนดนี้ขึ้นมาแล้วเปลี่ยนตัวเลขที่ ‘Output’ การส่งออกข้อมูลหลายค่านี้มีประโยชน์ในบางกรณีที่ต้องการจะส่งค่าข้อมูลเดียวกันจากการแปลงผลที่แตกต่างกันไปให้ยังโหนดที่แตกต่างกัน ตัวอย่างเช่น ผู้ใช้งานอาจต้องการส่งค่าที่ได้รับ topic มาว่า ‘banana’ ไปให้ยังหัวข้อส่งออกที่สองแทนจุดเชื่อมต่อส่งออกแรกของโหนด
if (msg.topic == "banana") {
return [null, msg];
} else {
return [msg, null];
}
หรืออีกตัวอย่างในการส่งค่าข้อมูลเดิมไปยังจุดเชื่อมต่อขาออกแรก และความยาวของค่า payload ไปยังจุดเชื่อมต่อขาออกที่สอง
var newMsg = { payload: msg.payload.length };
return [msg, newMsg];