Kodokon kodokon.com

Express: เราต์และมิดเดิลแวร์

ติดตั้ง Express และจัดโครงสร้างเซิร์ฟเวอร์แรกของคุณด้วยเราต์ พารามิเตอร์ URL และมิดเดิลแวร์

9 นาที · 3 คำถาม

เปิดบทเรียนนี้ใน Kodokon

คุณรู้จักวิธีเริ่มต้นเซิร์ฟเวอร์ด้วยมอดูล http ที่มาในตัวอยู่แล้ว ทุกอย่างในนั้นต้องทำเองด้วยมือ ตั้งแต่การอ่าน URL ไปจนถึงการประกอบเฮดเดอร์ Express คือเฟรมเวิร์กที่ทำให้การพัฒนาเว็บฝั่ง Node เป็นมาตรฐานเดียวกัน ทั้งการจัดเราต์ มิดเดิลแวร์ และ API ที่กระชับ โดยไม่ปิดบังรายละเอียดใด ๆ ของโปรโตคอล มาสร้างโปรเจกต์แล้วติดตั้งมันกัน

BASH
mkdir kodokon-api
cd kodokon-api
npm init -y
npm install express

เพิ่มคุณสมบัติ type ที่มีค่าเป็น module ลงใน package.json ของคุณ ทั้งโปรเจกต์จะใช้ ES module จากนั้นสร้างไฟล์ server.js เพียงไม่กี่บรรทัดก็เพียงพอสำหรับเซิร์ฟเวอร์ที่ทำงานได้ คุณสร้างแอปพลิเคชัน ประกาศเราต์หนึ่งเส้น แล้วฟังที่พอร์ตหนึ่ง

JAVASCRIPT
import express from "express";

const app = express();

app.get("/", (req, res) => {
  res.send("Kodokon API online");
});

app.listen(3000, () => {
  console.log("http://localhost:3000");
});
server.js - รันด้วย node server.js

เราต์คือการจับคู่เมท็อด HTTP และเส้นทาง (path) เข้ากับฟังก์ชันหนึ่ง ส่วนแบบไดนามิกจะประกาศด้วยเครื่องหมายทวิภาค (colon) ใน /users/:id ค่าจะอยู่ใน req.params.id ส่วนพารามิเตอร์คิวรี (?q=node) จะปรากฏใน req.query จงจำความแตกต่างนี้ไว้ เส้นทางระบุตัวทรัพยากร ส่วนคิวรีสตริงช่วยกรองรายละเอียดของคำขอ

JAVASCRIPT
app.get("/users/:id", (req, res) => {
  const { id } = req.params;
  res.json({ id, name: "User " + id });
});

app.get("/search", (req, res) => {
  const { q } = req.query;
  res.json({ query: q ?? "" });
});

มิดเดิลแวร์ (middleware) คือฟังก์ชันที่ทำงานระหว่างจังหวะที่คำขอมาถึงกับเราต์ของคุณ ลายเซ็นของมันคือ (req, res, next) มันสามารถเพิ่มข้อมูลให้ req ตอบกลับโดยตรง หรือส่งต่อด้วย next() โดยพื้นฐานแล้ว Express ก็คือสายโซ่ของมิดเดิลแวร์นั่นเอง ทั้งการบันทึกล็อก การยืนยันตัวตน และการแปลงเนื้อความ (body) ตัวนี้จะบันทึกล็อกทุกคำขอพร้อมระยะเวลาที่ใช้

JAVASCRIPT
app.use((req, res, next) => {
  const start = Date.now();
  res.on("finish", () => {
    const ms = Date.now() - start;
    console.log(`${req.method} ${req.url} ${ms}ms`);
  });
  next();
});
ประกาศมันก่อนเราต์ทั้งหมดเพื่อบันทึกล็อกทุกอย่าง

ทดสอบความรู้

ตรวจสอบว่าคุณจำประเด็นสำคัญของบทเรียนนี้ได้ครบถ้วน

  1. เราต์หนึ่งถูกประกาศด้วยเส้นทาง /users/:id คุณจะอ่านค่าของ id ได้จากที่ไหน?
    • ใน req.query.id
    • ใน req.params.id
    • ใน req.body.id
  2. ในมิดเดิลแวร์ของ Express การเรียก next() ทำอะไร?
    • มันส่งการตอบกลับไปยังไคลเอนต์
    • มันส่งต่อไปยังมิดเดิลแวร์หรือเราต์ถัดไป
    • มันรีสตาร์ตเซิร์ฟเวอร์
    • มันยกเลิกคำขอปัจจุบัน
  3. คุณต้องเพิ่มอะไรลงใน package.json เพื่อใช้ไวยากรณ์ import ใน Node.js?
    • คุณสมบัติ type ที่ตั้งค่าเป็น module
    • คุณสมบัติ esm ที่ตั้งค่าเป็น true
    • ไม่ต้องเพิ่มอะไร เพราะเป็นพฤติกรรมเริ่มต้นอยู่แล้ว