Node.js + Express: เส้นทางเทียบกับคอนโทรลเลอร์


102

ใหม่สำหรับ Node.js และ Express ฉันพยายามทำความเข้าใจทั้งสองแนวคิดที่ดูเหมือนทับซ้อนกันเส้นทางเทียบกับคอนโทรลเลอร์

ฉันได้เห็นตัวอย่างแล้วว่า app.js + route / * ที่เรียบง่ายดูเหมือนจะเพียงพอสำหรับกำหนดเส้นทางคำขอต่างๆที่จำเป็น

อย่างไรก็ตามฉันยังเห็นผู้คนพูดถึงการใช้คอนโทรลเลอร์และบางคนก็บอกเป็นนัยถึงโมเดล MVC ที่เป็นทางการมากขึ้น (???)

จะดีมากถ้ามีใครช่วยไขปริศนานี้ให้ฉันได้และถ้าคุณมีตัวอย่างที่ดีในการตั้งค่าคอนโทรลเลอร์ในกรอบงาน Node.js + Express จะดีมาก!

ขอบคุณ

คำตอบ:


131

สิ่งที่น่าสนใจอย่างหนึ่งเกี่ยวกับ Express (และ Node โดยทั่วไป) คือมันไม่ได้ผลักดันให้คุณมีความคิดเห็นมากนัก ข้อเสียประการหนึ่งคือการไม่ผลักดันความคิดเห็นใด ๆ กับคุณ ดังนั้นคุณมีอิสระ (และจำเป็น!) ในการตั้งค่าความคิดเห็น (รูปแบบ) ดังกล่าวด้วยตัวคุณเอง

ในกรณีของ Express คุณสามารถใช้รูปแบบ MVC ได้อย่างแน่นอนและตัวจัดการเส้นทางสามารถทำหน้าที่เป็นตัวควบคุมได้อย่างแน่นอนหากคุณต้องการ แต่คุณต้องตั้งค่าด้วยวิธีนั้น ตัวอย่างที่ยอดเยี่ยมสามารถพบได้ในโฟลเดอร์ตัวอย่าง Express ที่เรียกว่าmvc. หากคุณดูlib/boot.jsคุณจะเห็นว่าพวกเขาตั้งค่าตัวอย่างอย่างไรเพื่อต้องการให้แต่ละไฟล์ในcontrollersไดเร็กทอรีและสร้างเส้นทาง Express ได้ทันทีโดยขึ้นอยู่กับชื่อของวิธีการที่สร้างขึ้นบนคอนโทรลเลอร์


2
ย่อหน้าแรกของคำตอบที่ชาญฉลาดนี้ยังให้คำอธิบาย / ความแตกต่างที่ดีระหว่างสองคำ
Frank Nocke

1

คุณสามารถมีโฟลเดอร์เส้นทางหรือทั้งสองอย่างก็ได้ ตัวอย่างเช่นบางส่วนกำหนดเส้นทาง / เส้นทาง (เช่น / user /: id) และเชื่อมต่อกับ Get, Post, Put / Update, Delete ฯลฯ จากนั้นในโฟลเดอร์ route:

const subController = require('./../controllers/subController');

Router.use('/subs/:id');

Router
 .route('subs/:id')
 .get(subController.getSub)
 .patch(subController.updateSub);

จากนั้นในโฟลเดอร์ตัวควบคุม:

exports.getSub = (req, res, next) => {
  req.params.id = req.users.id;
};

เพียงเพื่อทำบางสิ่งบางอย่าง ฉันทำโปรเจ็กต์ที่ไม่มีโฟลเดอร์คอนโทรลเลอร์และวางตรรกะทั้งหมดไว้ในที่เดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.