Dark mode
http
http เป็นโมดูลในตัวของ Node.js ที่ให้ความสามารถในการสร้าง HTTP server และ client สำหรับการสื่อสารผ่านโปรโตคอล HTTP/HTTPS
import { createServer, request, get } from 'node:http';
API | คำอธิบาย | ลักษณะ | คำอธิบายเพิ่มเติม |
---|---|---|---|
createServer | สร้าง HTTP server | Asynchronous | ใช้รับและจัดการ HTTP requests |
request | สร้าง HTTP client request | Asynchronous | สำหรับส่ง HTTP requests ไปยัง server อื่น |
get | ส่ง HTTP GET request | Asynchronous | เหมาะสำหรับการส่ง GET requests ที่ไม่ซับซ้อน |
Server | Class สำหรับ HTTP server | Asynchronous | ใช้จัดการ connection และ requests |
IncomingMessage | Class สำหรับรับข้อมูล request | Asynchronous | ใช้อ่านข้อมูลจาก client (server) หรือ response จาก server (client) |
ServerResponse | Class สำหรับส่ง response | Asynchronous | ใช้เขียน response กลับไปยัง client |
ตัวอย่าง
สร้าง HTTP Server พื้นฐาน
js
import { createServer } from "http";
// สร้าง HTTP server
const server = createServer((req, res) => {
// ตั้งค่า header
res.setHeader("Content-Type", "text/plain");
// ตรวจสอบ URL path
if (req.url === "/") {
res.statusCode = 200;
res.end("Hello, World!");
} else if (req.url === "/about") {
res.statusCode = 200;
res.end("About Page");
} else {
res.statusCode = 404;
res.end("Page Not Found");
}
});
// เริ่มฟังที่ port 3000
server.listen(3000, () => {
console.log("Server running at http://localhost:3000/");
});
สร้าง HTTP Client
js
import { get } from "http";
// ส่ง GET request ไปยังเว็บไซต์
const req = get("http://www.example.com", (res) => {
let data = "";
// รับข้อมูล response
res.on("data", (chunk) => {
data += chunk;
});
// เมื่อรับข้อมูลครบ
res.on("end", () => {
console.log(`Status Code: ${res.statusCode}`);
console.log("Headers:", res.headers);
console.log("Body:", data.slice(0, 100) + "..."); // แสดงแค่ส่วนต้น
});
});
// จัดการ error
req.on("error", (err) => {
console.error("Request Error:", err);
});
สร้าง REST API อย่างง่าย
js
import { createServer } from "http";
const server = createServer((req, res) => {
// ตั้งค่า CORS headers
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Content-Type", "application/json");
// ตรวจสอบ method และ path
if (req.method === "GET" && req.url === "/api/users") {
const users = [
{ id: 1, name: "John Doe" },
{ id: 2, name: "Jane Smith" },
];
res.statusCode = 200;
res.end(JSON.stringify(users));
} else if (req.method === "POST" && req.url === "/api/users") {
let body = "";
// รับข้อมูลจาก client
req.on("data", (chunk) => {
body += chunk.toString();
});
// เมื่อรับข้อมูลครบ
req.on("end", () => {
const newUser = JSON.parse(body);
console.log("Received new user:", newUser);
res.statusCode = 201;
res.end(JSON.stringify({ message: "User created", user: newUser }));
});
} else {
res.statusCode = 404;
res.end(JSON.stringify({ error: "Not Found" }));
}
});
server.listen(3000, () => {
console.log("REST API running at http://localhost:3000");
});
ใช้ Stream สำหรับไฟล์ขนาดใหญ่
js
import { createReadStream } from "fs";
import { stat } from "fs/promises";
import { createServer } from "http";
const server = createServer(async (req, res) => {
try {
const filePath = "./large-file.pdf";
const stats = await stat(filePath);
res.setHeader("Content-Type", "application/pdf");
res.setHeader("Content-Length", stats.size);
// ส่งไฟล์แบบ stream
const stream = createReadStream(filePath);
stream.pipe(res);
stream.on("error", (err) => {
res.statusCode = 500;
res.end("File Error");
});
} catch (err) {
res.statusCode = 404;
res.end("File Not Found");
}
});
server.listen(3000);
ส่ง POST Request ด้วยข้อมูล JSON
js
import { request } from "http";
// ข้อมูลที่จะส่ง
const postData = JSON.stringify({
title: "foo",
body: "bar",
userId: 1,
});
// ตั้งค่า options สำหรับ request
const options = {
hostname: "jsonplaceholder.typicode.com",
port: 80,
path: "/posts",
method: "POST",
headers: {
"Content-Type": "application/json",
"Content-Length": postData.length,
},
};
// สร้าง request
const req = request(options, (res) => {
let data = "";
res.on("data", (chunk) => {
data += chunk;
});
res.on("end", () => {
console.log("Response:", JSON.parse(data));
});
});
// จัดการ error
req.on("error", (err) => {
console.error("Request Error:", err);
});
// เขียนข้อมูลและส่ง request
req.write(postData);
req.end();