Node.js ฉบับเริ่มต้น : โครงสร้างภายในโปรแกรม

Node.js Jan 19, 2021

บทความฉบับนี้จะเป็นการเรียบเรียงเกี่ยวกับการใช้ฟังก์ชั่นพื้นฐานต่างๆ ในฟังก์ชั่น createServer ซึ่งก่อนอื่น ขอย้อนความไปยังใจความสำคัญของ Node.js ที่มาที่ไป และรูปแบบในกระบวนการทำงาน ซึ่งผมได้เคยกล่าวไว้ในบทความนี้

ต่อมา เราจะพูดถึงการกำหนดฟังก์ชั่นที่จำเป็นต้องใช้ในการทำ API (application Program Inrterface) ก็คือ โค้ดหรือคำสั่ง ที่ให้เครื่องคอม 2 เครื่องสื่อสารหากันได้ ในที่นี่ เครื่อง 2 เครื่องนั้นคือ Client กับ Server นั่นเอง (และการติดต่อสื่อสารกันนั้น ก็คือการโต้ตอบที่เรียกว่า request กับ response) ซึ่งเจ้า API ถูกสร้างมาเพื่อรับ request และส่ง response กันระหว่าง Client กับ Server
Client จะเป็นฝ่ายที่ส่ง request ซึ่งประกอบไปด้วย URL, พารามิเตอร์ รวมถึงข้อกำหนดอื่นๆไปหา Server เพื่อร้องขอการบริการ และ Server จะตอบสนองต่อบริการนั้น รูปแบบโครงสร้างของหน้า root directory ของ Node จะมีลักษณะแบบนี้

// Dependencies
var http = require('http');

// Configure a server
var server = http.createServer(function funcName (req, res) {
  res.end('Hello World!');
});

// Start the server
server.listen(3000, function() {
  console.log('The server is listening in port 3000')
});

อธิบายส่วนประกอบของโค้ดด้านบนออก แบ่งมาเป็น 3 ส่วน ได้แก่

1.Dependency(-ies)

คือการใช้ฟังก์ชั่น require() ดึงเอาโมดูลหรือไลบรารี่ที่มีอยู่ใน Node (หรือจะเป็นไฟล์ที่สร้างขึ้นมาเองก็ได้) มาเก็บไว้ในตัวแปรที่กำหนด
จากตัวอย่าง เรียกโมดูล http เอามาเก็บไว้ที่ตัวแปรที่ตั้งชื่อว่า http

2.Configure a server

สร้าง Function expression เป็น server ขึ้นมาโดยใช้ฟังก์ชั่น createServer() ที่เอามาจากโมดูล http ผ่านตัวแปร http เพราะเป็นฟังก์ชั่นที่อยู่ในโมดูลอื่น (หรือบางภาษาเรียกว่า method) การใช้งานต้องสั่งตาม syntax เป็น

http.createServer(requestListener);

ภายในวงเล็บจะมีพารามิเตอร์ (requestListener) เป็น Callback Function ที่จะต้องถูกเรียกใช้เมื่อฟังก์ชั่น createServer ทำงานจบ ตัว Callback จะมีออบเจ็คต์ 2 ตัว เป็นพารามิเตอร์ ภายในพารามิเตอร์แต่ละตัว จะเก็บฟังก์ชั่นต่างๆเอาไว้ ในที่นี่ พารามิเตอร์ตัวแรก เราตั้งชื่อเป็น req ส่วนพารามิเตอร์ตัวที่สอง เราตั้งชื่อเป็น res และมีการเรียกใช้ฟังก์ชั่น end() จากตัวที่สองนั่นเอง
ตัวฟังก์ชั่นที่เป็น requestListener นั่น เราสามารถกำหนดให้มันเป็น Anonymous Function หรือ Function expression ได้เช่นเดียวกัน เพื่อความสะดวกในการเขียนโปรแกรมได้ดังนี้

var server = http.createServer(function(req, res) {
  res.end('Hello World!')
});

หรือว่าจะเปลี่ยนเป็น Arrow Function ก็ได้

var server = http.createServer((req, res)=> {
  res.end('Hello World!');
});

3.Start the server

การเรียกใช้ฟังก์ชั่น listen() เพื่อเรียก server ให้รอรัน (listening) ภายในจะประกอบไปด้วยพารามิเตอร์ 2 ตัว ตัวแรกเป็น integer เป็น port ที่จะรัน ตัวที่สอง host ที่เป็น IPv4 address ส่วนตัวที่สามเป็น Callback Fuction จะทำงานต่อเนื่องจาก listen() ทำงานจบ มีรูปแบบ syntax เป็น

server.listen([port[, host[, backlog]]][, callback])

จากตัวอย่าง

server.listen(3000, function() {
  console.log('The server is listening in port 3000')
});

แปลความหมายว่า เมื่อมี request มาที่ host (ณ ที่นี้ไม่ได้ระบุเอาไว้) ผ่าน port 3000 จะทำให้ server รอทำงานและจบด้วย เรียก ฟังก์ชั่นเรียกกลับ (callback) มาทำงาน

Summary

นี่เป็นพื้นฐานเกี่ยวกับโครงสร้างของโค้ดที่เป็นส่วนประกอบหลักที่จะถูกใช้ในการทำงานของ Node.js ที่ผมได้เรียนรู้มา และอยากจะบันทึกเก็บเอาไว้ เผื่อกลับมาอ่านตอนที่มึนมาจากกองโค้ดที่จะเกิดขึ้นในอนาคต เราจะใช้โครงสร้างเพื่อต่อยอดไปยังคำสั่งและกระบวนท่าที่ยากขึ้นไป เพราะฉะนั้น การทำความเข้าใจเรื่องเล็กน้อยเช่นนี้ก็เป็นสิ่งจำเป็น แล้วพบกันใหม่ในบทความหน้าครับ

แหล่งอ้างอิง

https://stackoverflow.com/questions/33769702/understanding-node-javascript-callback-functions

https://www.javascripttutorial.net/nodejs-tutorial/nodejs-http-module/

https://www.w3schools.com/nodejs/nodejs_http.asp

https://www.geeksforgeeks.org/node-js-server-listen-method/

Tags