สถาปัตยกรรม API เริ่มต้น ประกอบด้วยชุดโมดูล บริการ และการกำหนดค่าพื้นฐานและต้องมี
ใช้ Express Middlewares เพื่อแยกฟังก์ชันการทำงานและแยกส่วนต่างๆ ตามตรรกะ เราเตอร์/ปลายทางแต่ละตัวอาจมีสายมิดเดิลแวร์เพื่อตรวจสอบข้อมูล โหลดข้อมูลจากแหล่งข้อมูล ข้อมูลแผนที่ ตรวจสอบสิทธิ์ และดำเนินการตามตรรกะทางธุรกิจหลัก
แต่ละฟังก์ชันมิดเดิลแวร์ควรมี ชื่อเดียวกัน ตลอดทั้งชุดลูกโซ่
ตัวอย่าง: หากคำขอใหม่ของกระบวนการสร้างผู้ใช้ผ่านฟังก์ชันมิดเดิลแวร์หลายฟังก์ชัน คำขอทั้งหมดควรมีชื่อเดียวกัน ( createOne(req, res, next)
)
* ข้อยกเว้น: มิดเดิลแวร์ 'ตัวช่วย' ที่ไม่เกี่ยวข้อง
ตัวอย่าง:
appRoute.get('/:userId',
authMiddleware.isAuthenticated,
acl.getOne,
validator.getOne,
loader.getOne,
controller.getOne,
);
./app/middlewares/
เชื่อมโยงรายการเพื่อทำหน้าที่เฉพาะของตนเอง
ตรวจสอบว่าคำขอปัจจุบันอาจเข้าถึงตรรกะทางธุรกิจหรือไม่ เลเยอร์นี้อาจตรวจสอบว่าผู้ใช้ที่เข้าสู่ระบบมีสิทธิ์ดำเนินการตามคำขอนี้หรือไม่
ตัวอย่าง:
async getOne(req, res, next) {
if (mainAcl.isAdmin(req.user)) {
return next();
}
const userIdRequested = req.params.userId;
const userIdCurrent = req.user._id.toString();
if (userIdRequested === userIdCurrent) {
return next();
}
return next(new Forbidden());
},
แผนที่ข้อมูลขาออก/ขาเข้าสำหรับการประมวลผลเพิ่มเติมโดยฟังก์ชันอื่น
ตัวอย่าง:
updateOne(req, res, next) {
delete req.body.password;
delete req.body.confirm_password;
return next();
},
ตรวจสอบข้อมูลขาเข้าตามกฎที่ติดตั้งไว้เพื่อป้องกันข้อมูลที่ไม่ถูกต้องจากการจัดการ
ตัวอย่าง:
deleteOne(req, res, next) {
req.assert('userId', 'Valid user id should be provided').notEmpty().isMongoId();
mainValidator.handleValidationResult(mainValidator.validateErrorsSync(req), res, next);
},
โหลด/รับที่ต้องการโดยเอนทิตี/ออบเจ็กต์ตรรกะทางธุรกิจจากแหล่งข้อมูลที่มีอยู่ ระบบอาจดึงผู้ใช้หรือหน่วยงานที่เกี่ยวข้องจากฐานข้อมูลหรือประมวลผลข้อมูล
จัดเก็บและส่งเอนทิตีที่โหลดในออบเจ็กต์พิเศษภายในออบเจ็กต์ req
(คำขอ) ควรใช้ บริการ Entity Loader เพื่อส่งเอนทิตีทั้งหมดและส่งผ่านภายในออบเจ็กต์คำขอ
ตัวอย่าง:
async getOne(req, res, next) {
try {
const userFound = await UserService.findOne({ query: { _id: req.params.userId }, options: { lean: true } });
if (!mainHelper.isObjectValid(userFound)) {
throw new NotFound('user not found');
}
MainLoader.setEntities(req, { user: userFound });
return next();
} catch (err) {
return next(err);
}
},
./app/services/
บริการต่างๆ ดำเนินการฟังก์ชันการทำงานแบบมุ่งเน้นเดียวที่จะเรียกใช้ภายในแอปพลิเคชันเพื่อจัดการตรรกะทางธุรกิจ
./commands
ไปที่ https://nodejs.org เพื่อดูรายละเอียดการติดตั้ง
Node Package Manager ควรมาพร้อมกับโหนด
ติดตั้ง MongoDB https://docs.mongodb.com/manual/installation/
$ git clone <package url> .
$ npm install
config/env/env.local
และคัดลอกข้อมูลจาก config/env/env.local_example
config/env/.env.test
และคัดลอกข้อมูลจาก config/env/.env.test_example
$ npm run start:[environment]
ตัวอย่าง: $ npm run start:local