Node.js Global objects
ในบทนี้ เราจะแนะนำให้คุณรู้จักกับ Global objects บน Node.js มันเป็นออบเจ็คที่สามารถเข้าถึงได้จากทุกส่วนของโปรแกรมที่เขียนบน Node.js เราจะมาดูกันว่ามันคืออะไร และมีความสำคัญอย่างไรในการทำงานของ Node.js นี่เป็นเนื้อหาในบทนี้
- Global objects ใน Node.js
- Module wrapper ใน Node.js
Global objects ใน Node.js
Global objects เป็นออบเจ็คของ Node.js ที่ถูกนำเข้ามาในโปรแกรมอัตโนมัติเมื่อโปรแกรมเริ่มต้นทำงาน เช่นเดียวกันกับการเขียนโปรแกรมบนเว็บเบราว์เซอร์ คุณสามารถเข้าถึงออบเจ็คที่เป็น Global ซึ่งจำเป็นในการทำงานกับเว็บเบราว์เซอร์ได้ ยกตัวอย่างเช่น ออบเจ็ค document
สำหรับเข้าถึงและจัดการกับ DOM หรือออบเจ็ค window
สำหรับติดต่อกับอินเตอร์เฟซและควบคุมการทำงานของเบราว์เซอร์
เมื่อเราพูดถึง Global objects บน Node.js มันเป็นออบเจ็คที่เราสามารถเข้าถึงได้ทันทีภายในโปรแกรมที่เขียนบน Node.js โดยที่ไม่จำเป็นต้องโหลดหรือนำเข้าโมดูล โดยทั่วไปแล้ว Global objects ที่สามารถใช้ได้จะแบ่งออกเป็นสองประเภทได้แก่
- ออบเจ็คมาตรฐานในภาษา JavaScript
- ออบเจ็คของ Node.js เอง
เนื่องจาก Node.js เป็นสภาพแวดล้อมที่ใช้สำหรับรันโปรแกรมภาษา JavaScript ดังนั้นมันจะต้องให้ออบเจ็คและโมดูลทั้งหมดในภาษา JavaScript ที่เป็นไปตามข้อกำหนดของ ECMAScript นี่เป็นตัวอย่างของการใช้งานออบเจ็คมาตรฐานในภาษา JavaScript บน Node.js
let url = new URL('http://marcuscode.com/');
console.log(url.toString());
let myMap = new Map();
myMap.set('metin', 1);
console.log(myMap);
และนี่เป็นผลลัพธ์การทำงานของโปรแกรม
http://marcuscode.com/
Map(1) { 'metin' => 1 }
ในตัวอย่างนี้ เราได้แสดงให้คุณเห็นถึงการใช้คลาสและออบเจ็คที่คุ้นเคยในภาษา JavaScript เราได้ใช้คลาส URL
สำหรับสร้างออบเจ็คของลิงก์ คลาส Map
สำหรับสร้างออบเจ็คเพื่อเก็บข้อมูลในรูปแบบของ Key/Value สุดท้ายฟังก์ชัน console.log
นั้นใช้สำหรับแสดงข้อมูลออกทางหน้าจอ
ทั้งหมดที่คุณเห็นนั้นเป็นออบเจ็คมาตรฐานในภาษา JavaScript นั่นหมายความว่าคุณสามารถใช้งานมันได้ในทุกสภาพแวดล้อมการทำงาน ไม่ว่าจะเป็น Node.js หรือบนเบราว์เซอร์เองก็ตาม
สำหรับออบเจ็คประเภทที่สองเป็นออบเจ็คเฉพาะของ Node.js เอง มันเป็นออบเจ็คที่ช่วยให้เราสามารถรับเอาข้อมูล และติดต่อกับอินเตอร์เฟซของระบบปฏิบัติการได้ นั่นคือ process
ซึ่งออบเจ็คนี้ประกอบไปด้วยข้อมูลและเมธอดที่จำเป็นสำหรับการเขียนโปรแกรมบน Node.js นี่เป็นตัวอย่าง
console.log(`Process ID ${process.pid}`);
console.log(`Memory usage`, process.memoryUsage());
ในตัวอย่างนี้ เราใช้ออบเจ็ค process
สำหรับอ่านค่า Process ID ปัจจุบันที่กำลังใช้รัน Script นี้จากการอ่านค่าจาก Property process.pid
และใช้เมธอด memoryUsage
สำหรับรับเอาข้อมูลเกี่ยวกับการใช้งานหน่วยความจำบนระบบ
นอกจากนี้ เรายังสามารถเข้าถึง Input/Output ของระบบได้โดยตรงผ่านออบเจ็ค process.stdin
และ process.stdout
ซึ่งสองออบเจ็คนี้ใช้สำหรับการรับค่าและการแสดงผลบน Node.js
// Access standard input interface
process.stdin;
// Access standard output interface
process.stdout;
นอกจากนี้ยังมีเมธอดและออบเจ็คอื่นๆ ที่เราสามารถเข้าถึงได้ผ่านออบเจ็ค process
ซึ่งสามารถช่วยอำนวยความสะดวกให้กับเราในการเขียนโปรแกรมบน Node.js
Module wrapper ใน Node.js
Node.js ยังมีออบเจ็คที่สามารถเข้าถึงได้ในทุกโมดูล (ไฟล์ของโปรแกรม) ซึ่งออบเจ็คเหล่านี้ประกอบไปด้วย exports
, require
, module
, __filename
และ __dirname
ออบเจ็คเหล่านี้เป็นออบเจ็คที่มีการทำงานเฉพาะสำหรับแต่ละโมดูล โดยมันม่ีหน้าที่การทำงานดังต่อไปนี้
- exports: เป็นออบเจ็คสำหรับส่งออบเจ็คออกจากโมดูลเพื่อนำไปใช้งานในโมดูลอื่น
- require: เป็นเมธอดสำหรับนำเข้าออบเจ็คจากโมดูลอื่นเข้ามาใช้งานในโมดูลปัจจุบัน
- module: เป็นออบเจ็คที่มีข้อมูลเกี่ยวกับโมดูลที่สามารถนำมาใช้งานได้ในโปรแกรม
- __filename: เป็นชื่อไฟล์ของโมดูลปัจจุบันที่โปรแกรมกำลังทำงานอยู่
- __dirname: เป็นชื่อโฟล์เดอร์ของโมดูลปัจจุบันที่โปรแกรมกำลังทำงานอยู่
ในการทำงานเบื้่องหลังของ Node.js ก่อนที่แต่ละโมดูลจะทำงาน ทุกอย่างนั้นถูกครอบและรันใน Wrapper ด้วยฟังก์ชันต่อไปนี้
(function (exports, require, module, __filename, __dirname) {
// Module code actually lives in here
});
นั่นจึงเป็นเหตุผลว่าทำไมเราสามารถใช้งานมันได้ในโมดูล และมันช่วยทำให้ Node.js สามารถปรับแต่งการทำงานของฟังก์ชันขึ้นกับโมดูลที่ทำงาน และทำให้โมดูลทั้งหมดในระบบสามารถเชื่อมต่อกันได้อย่างมีประสิทธิภาพ และง่ายสำหรับนักพัฒนาในการเขียนโปรแกรม
แม้ว่าออบเหล่านี้จะเหมือน Global ออบเจ็ค แต่ความจริงแล้วมันไม่ใช่ เหตุผลก็เพราะมันถูกนำเข้าอัตโนมัติโดย Module wrapper เหมือนกับที่เราได้อธิบายไว้
หมายเหตุ: บน Node.js ไฟล์ของโปรแกรมและโมดูลเป็นสิ่งเดียวกัน นั่นหมายความว่าเมื่อคุณสร้างไฟล์ใหม่มันหมายความว่าคุณสร้างโมดูลด้วยเช่นกัน
นี่เป็นตัวอย่างของการใช้งานออบเจ็ค module
สำหรับส่งออกออบเจ็คออกไปที่นอกโมดูล และฟังก์ชัน require
ในการนำเข้าโมดูลอื่นมาใช้งานในโมดูลปัจจุบัน ก่อนอื่นเราสามารถโมดูล utils.js
สำหรับเก็บฟังก์ชันเพื่อที่จะนำไปใช้งานในโมดูลอื่นดังนี้
function hello(name) {
console.log(`Hello ${name}!`);
}
module.exports = hello;
เพื่อทำให้ฟังก์ชัน hello
สามารถนำไปใช้ได้โดยโมดูลอื่น เราส่งมันออกไปโดยกำหนดค่าผ่านออบเจ็ค module.exports
จากนั้นในโมดูล index.js
เรานำเข้าโมดูลดังกล่าวมาใช้งาน
const hello = require('./utils');
hello('John');
เพื่อนำเข้าโมดูลอื่นมาใช้งานเราใช้ฟังก์ชัน require
โดยการส่งชื่อโมดูลเป็นพารามิเตอร์ของฟังก์ชัน นี่จะส่งค่ากลับเป็นออบเจ็คที่เราส่งออกมาผ่านทางออบเจ็ค module.exports
ในกรณีนี้คือฟังก์ชัน hello
และนี่เป็นผลลัพธ์การทำงานของโปรแกรม
Hello John!
จะเห็นว่าการใช้งานโมดูลสามารถช่วยให้เราแบ่งโค้ดออกเป็นส่วนๆ ได้ ซึ่งนี่จะช่วยให้การพัฒนาและการดูแลรักษาทำได้ง่าย เมื่อโปรเจ็คของเรามีขนาดใหญ่ คุณจะได้เรียนเกี่ยวกับโมดูลอีกครั้งในบทของโมดูล
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ Global ออบเจ็คบน Node.js เราได้พูดถึงออบเจ็คสองประเภทได้แก่ ออบเจ็คมาตรฐานในภาษา JavaScript และออบเจ็คของ Node.js เอง นอกจากนี้ เราได้พูดถึงออบเจ็คที่คุณสามารถใช้งานได้ในโมดูลที่มอบให้โดย Module wrapper