Dark mode
Core Concepts of Node.js (แนวคิดหลักของ Node.js)
Event Loop (ลูปเหตุการณ์)
Event Loop เป็นหัวใจสำคัญของ Node.js ที่ทำให้ทำงานแบบ Non-blocking I/O ได้ โดยใช้หลักการ Single-threaded แต่รองรับการทำงานแบบ Asynchronous
javascript
// ตัวอย่างการทำงานแบบ Asynchronous
const fs = require("fs");
fs.readFile("file.txt", "utf8", (err, data) => {
if (err) throw err;
console.log(data);
});
console.log("ทำงานต่อไปได้ทันทีโดยไม่ต้องรอ");
Modules System (ระบบโมดูล)
Node.js ใช้ระบบโมดูลแบบ CommonJS ทำให้สามารถแบ่งโค้ดออกเป็นส่วนๆ และนำกลับมาใช้ใหม่ได้
javascript
// math.js
module.exports = {
add: (a, b) => a + b,
subtract: (a, b) => a - b,
};
// app.js
const math = require("./math");
console.log(math.add(2, 3)); // 5
ES Modules
Node.js รองรับ ES Modules (แบบใหม่) ด้วย
javascript
// math.mjs
export function add(a, b) {
return a + b;
}
// app.mjs
import { add } from "./math.mjs";
console.log(add(2, 3)); // 5
Asynchronous Programming (การเขียนโปรแกรมแบบ Async)
Node.js เน้นการทำงานแบบ Asynchronous ด้วย 3 วิธีหลัก:
1. Callbacks
javascript
const fs = require("fs");
fs.readFile("file.txt", "utf8", (err, data) => {
if (err) return console.error(err);
console.log(data);
});
2. Promises
javascript
const fs = require("fs").promises;
fs.readFile("file.txt", "utf8")
.then(data => console.log(data))
.catch(err => console.error(err));
3. Async/Await
javascript
async function readFile() {
try {
const data = await fs.promises.readFile("file.txt", "utf8");
console.log(data);
} catch (err) {
console.error(err);
}
}
readFile();
Streams (สตรีม)
ช่วยจัดการข้อมูลขนาดใหญ่โดยไม่ต้องโหลดทั้งหมดเข้าหน่วยความจำ
javascript
const fs = require("fs");
const readStream = fs.createReadStream("largefile.txt");
const writeStream = fs.createWriteStream("output.txt");
readStream.pipe(writeStream);
Buffer (บัฟเฟอร์)
ใช้จัดการข้อมูล Binary ใน Node.js
javascript
const buf = Buffer.from("Hello World", "utf8");
console.log(buf.toString("hex")); // แสดงผลในรูปแบบ HEX
Error Handling (การจัดการข้อผิดพลาด)
javascript
// แบบ Synchronous
try {
JSON.parse("invalid json");
} catch (err) {
console.error(err);
}
// แบบ Asynchronous
fs.readFile("nonexistent.txt", (err, data) => {
if (err) {
console.error("เกิดข้อผิดพลาด:", err.message);
return;
}
console.log(data);
});
Child Processes (กระบวนการย่อย)
ช่วยให้รันคำสั่งหรือสคริปต์อื่นๆ ขนานกันได้
javascript
const { exec } = require("child_process");
exec("ls -la", (error, stdout, stderr) => {
if (error) {
console.error(`error: ${error.message}`);
return;
}
console.log(stdout);
});
Cluster (คลัสเตอร์)
ช่วยใช้ประโยชน์จาก CPU หลาย core
javascript
const cluster = require("cluster");
const http = require("http");
const numCPUs = require("os").cpus().length;
if (cluster.isPrimary) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end("Hello World");
}).listen(8000);
}