Routing เป็นการกำหนด URI (Endpoints) และ Methods ภายใน Applications ว่าให้ตอบสนองอย่างไรเมื่อ Client ทำการเรียกเข้ามา เป็นเรื่องแรกที่ควรเข้าใจเมื่อเราใช้ Node.js + ExpressJS ในการสร้างเว็บไซต์ หรือ API
การกำหนด Routing คล้ายกับการกำหนดว่า URL ที่เรียกมาจากภายนอกจะเข้ามาที่โค้ดคำสั่งไหนภายใน ExpressJS ของเรา มีตัวอย่างดังนี้
var express = require("express");
var app = express();
app.get("/", (req, res) => {
res.send("hello world");
});
app.get("/users/:userId", (req, res) => {
res.send(req.params);
});
app.listen(3000, () => {
console.log("Server listening on port 3000!");
});
URI กับ URL นั่นอ้างอิงไปที่เดียวกัน เพียงแต่ถ้าเราพูดถึงทรัพยากรภายในเครื่องจะใช้ URI ส่วน URL จะพูดถึงตำแหน่ง (Location) ที่อยู่ในมุมมองจากภายนอกเข้ามามากกว่า
ถ้าเรียกมาด้วย http://localhost:3000 คำสั่งส่วนนี้จะทำงาน
app.get("/", (req, res) => {
res.send("hello world");
});
ได้ผลลัพธ์เป็น
hello world
ถ้าเรียกมาด้วย http://localhost:3000/users/olanlab คำสั่งส่วนนี้จะทำงาน
app.get("/users/:userId", (req, res) => {
res.send(req.params);
});
ได้ผลลัพธ์เป็น
{"userId":"olanlab"}
จากตัวอย่างด้านที่ผ่านมาจะเป็นการจัดการ HTTP Method แบบ get เพียงอย่างเดียว แต่ HTTP ยังมี Method แบบอื่นๆ ที่มีความหมายแตกต่างกัน ดังนี้
การประกาศใช้ HTTP Method อื่นๆ สามารถทำได้โดย object ของ express ตามด้วย Method ที่ต้องการ
// GET method route
app.get("/", function(req, res) {
res.send("GET request to the homepage");
});
// POST method route
app.post("/", function(req, res) {
res.send("POST request to the homepage");
});
การรวม HTTP Method ต่างที่มายัง URL ตัวเดียวกัน สามารถทำได้อย่างง่ายๆ
app.route("/book")
.get(function(req, res) {
res.send("Get a random book");
})
.post(function(req, res) {
res.send("Add a book");
})
.put(function(req, res) {
res.send("Update the book");
});
สุดท้ายการกำหนดว่า parameters ที่เข้ามาผ่าน URL โดยใช้ : ตามด้วยชื่อ parameters ทำให้ที่ Callback Method สามารถอ้างอิงถึง paramters ตัวนั่นได้ผ่าน req.params.xxx โดย xxx คือชื่อ parameters นั่นเอง
app.get("/users/:userId/books/:bookId", function(req, res) {
res.send(req.params);
});
ผลลัพธ์