Node-RED: เชื่อมโลกง่ายๆ แค่ลากวาง (ไม่ต้องโค้ดเยอะม๊าก!)
Node-RED: มันคืออะไร แล้วทำไมเราต้องรู้จักมัน?
สวัสดีครับทุกคน! วันนี้ขอมาแนะนำของเล่นใหม่? หรือเก่าแล้วก็ไม่รู้สิ แต่ยังไงก็ยังใช้ได้ดีมากๆ นั่นก็คือ Node-RED คือโปรแกรมที่ถูกพัฒนาโดย IBM Research เป็นเครื่องมือสำหรับการเขียนโปรแกรมแบบ visual programming คือลากวางๆ เอา block มาต่อกันอ่ะนึกออกปะ? เหมือนเราต่อบล็อก LEGO อ่ะ แล้วมันก็ทำงานได้จริงๆ โคตรเจ๋งเลยนะ
เหมาะมากสำหรับงาน IoT (Internet of Things), การเชื่อมต่อ API ต่างๆ, หรือแม้กระทั่งการทำ Automation ในบ้านง่ายๆ คือมันโคตรจะยืดหยุ่นเลย อยากทำอะไรแปลกๆ ก็ลองเอา Node มาต่อกันได้หมดเลยครับ
ติดตั้ง Node-RED แบบคนคูลๆ ด้วย Docker
วิธีติดตั้ง Node-RED มีหลายแบบนะ จะลงผ่าน Node.js ตรงๆ ก็ได้ หรือจะใช้ Docker ก็ง่ายดี ส่วนตัวชอบ Docker เพราะมันคลีนดี จัดการง่าย ไม่ต้องไปวุ่นวายกับระบบหลัก
เปิด Terminal ขึ้นมาเลย พิมพ์ๆ ตามนี้:
docker run -it -p 1880:1880 --name my-node-red --restart unless-stopped nodered/node-red
พอรันเสร็จนะ เปิดเบราว์เซอร์ไปที่ http://localhost:1880 คุณก็จะเจอหน้าตา UI ของ Node-RED แล้ว! ง่ายมะ?
Flow แรก! (Hello World สไตล์คนไม่ชอบโค้ดเยอะ)
พอเข้ามาหน้า Node-RED UI ครั้งแรก คุณจะเจอพื้นที่ว่างๆ ตรงกลางเยอะเลย นั่นแหละ Canvas ของเรา.
- ลาก Node ที่ชื่อ
inject(อยู่ทางซ้ายมือ) มาวางไว้บน Canvas. - ลาก Node ที่ชื่อ
debugมาวางต่อ. - เอาเมาส์จิ้มตรงจุดเล็กๆ ขวาของ
injectแล้วลากไปเชื่อมกับจุดซ้ายของdebug. - ดับเบิลคลิกที่ Node
injectตั้งค่าPayloadเป็นstringแล้วใส่ข้อความอะไรก็ได้ เช่น"Hello Node-RED from my heart!"แล้วกดDone. - กดปุ่ม
Deployสีแดงๆ มุมขวาบน.
ทีนี้ลองกดปุ่มสี่เหลี่ยมเล็กๆ ที่ inject Node ดูสิ! แล้วไปดูที่ Tab debug (อยู่ด้านขวาของจอ) คุณจะเห็นข้อความที่คุณพิมพ์โผล่มาเลย! นี่แหละ Flow แรกของเรา โคตรง่าย!
ลองของจริง! ดึงข้อมูลจาก API มาเล่น
มาลองทำอะไรที่ซับซ้อนขึ้นหน่อย แต่ก็ยังง่ายอยู่ดี! เราจะดึงข้อมูลจาก API สาธารณะมาแสดง (เช่น catfact.ninja/fact ที่ให้ข้อมูลสุ่มเกี่ยวกับแมว)
- ลาก Node
injectมาเหมือนเดิม. - ลาก Node
http requestมาต่อจากinject. - ดับเบิลคลิกที่
http requestตั้งค่าMethodเป็นGETและURLเป็นhttps://catfact.ninja/factแล้วกดDone. - ลาก Node
debugมาต่อจากhttp request. - กด
Deploy.
ลองกดปุ่มที่ inject Node อีกที แล้วดูที่ Tab debug คุณจะเห็น Object JSON ที่มีข้อมูลเกี่ยวกับแมวโผล่มา! เจ๋งป่ะละ?
เจอ Error แบบเซ็งๆ:
จากใจเลยนะ บางทีมันก็ไม่ได้ราบรื่นเสมอไปหรอก เวลาดึง API สิ่งที่เจอประจำคือ JSON Parsing Error หรือ Network Error.
สมมติว่า API ที่เราเรียกมันส่งข้อมูลมาไม่เป็น JSON หรือเน็ตหลุดพอดี๊พอดี:
ถ้าคุณเห็นใน Debug Tab ขึ้นข้อความประมาณว่า Error: Unexpected token < in JSON at position 0 หรืออะไรทำนองนี้ นั่นแปลว่าสิ่งที่ API ส่งมามันไม่ใช่ JSON เว้ย! หรืออาจจะเป็น HTML ของหน้า Error ก็เป็นได้ (เคยเจอแบบว่า Server error แล้วมันส่งหน้า HTML กลับมาแทน JSON อ่ะ).
วิธีแก้เบื้องต้นของผม: * เช็ค URL ดีๆ: พิมพ์ผิดป่าว? HTTPS หรือ HTTP? ลองเอา URL ไปใส่ใน Postman หรือ Browser ตรงๆ ดูว่าได้ JSON จริงไหม * ใช้ json Node: Node-RED มี Node ที่ชื่อ json ด้วยนะ เอามาคั่นระหว่าง http request กับ debug ก็ช่วยได้เยอะ ถ้ามันเป็น JSON อยู่แล้วมันก็ผ่านไป แต่ถ้าไม่ใช่ มันจะพยายาม parse ให้ หรือโยน error ออกไปอีก branch ได้ (ถ้าคุณเชื่อม output error ของ node เข้ากับ debug node อีกตัว). * catch Node: อันนี้เทพจริง ถ้าอยาก handle error โดยเฉพาะ มี Node ชื่อ catch ดักจับ error จาก Node อื่นๆ ได้ดีเลยลากมาใช้คู่กับ debug อีกตัวจะได้รู้ว่า Error มันเกิดจาก Node ตัวไหน.
สรุปความรู้สึกส่วนตัว
Node-RED เป็นอะไรที่โคตรมีประโยชน์สำหรับคนที่อยากสร้าง Prototype เร็วๆ, ทำระบบ IoT แบบไม่ปวดหัวเรื่องโค้ด, หรือคนที่ไม่ได้เชี่ยวชาญการเขียนโปรแกรมมากๆ แต่ก็อยากทำอะไรเจ๋งๆ.
ข้อดี: * โคตรง่าย: ลากวางๆ ก็ทำงานได้ละ * เร็ว: สร้าง Flow ได้ไวมาก * Node เยอะ: มี Node ให้เลือกใช้เป็นพันๆ ตัวเลยมั้ง เชื่อมต่อได้เกือบทุกอย่าง * Visual Debugging: เห็น Flow ชัดเจน เวลาแก้บั๊กก็ง่าย
ข้อเสีย (ที่เจอส่วนตัวนะ): * ถ้า Flow ซับซ้อนมากไป: บางที Flow ที่มันยาวๆ วงจรซ้อนกันเยอะๆ ก็ดูตาลายเหมือนกันนะ จัดระเบียบดีๆ ล่ะ * Performance: ถ้าต้องประมวลผลอะไรที่หนักมากๆ หรือมี Request เยอะๆ ตลอดเวลา อาจจะไม่เหมาะเท่าไหร่ แต่ถ้าเป็นงานเบาๆ สบายๆ ไม่ต้องห่วงเลย
โดยรวมคือชอบมากๆ เป็นเครื่องมือที่ทำให้คนที่ขี้เกียจเขียนโค้ดเยอะๆ อย่างผมเนี่ย มีกำลังใจในการสร้างสรรค์อะไรใหม่ๆ ขึ้นมาเยอะเลย ลองไปเล่นกันดูนะ แล้วจะติดใจ!