บทความนี้ เป็นการแนะนำการ Setup โครงสร้างโปรเจคสำหรับสร้าง RESTFul API ด้วย Node.js และ Express.js เชื่อว่าคนที่เคยเขียน API ด้วย Express ต้องเคยเจอปัญหาว่าจะสร้างโครงสร้างของโปรเจคอย่างไรดี เนื่องจากทาง Express ไม่มีรูปแบบที่แนะนำ ทำให้การพัฒนาเป็นไปอย่างหลากหลาย ตามความถนัดของแต่ละคน หรือแต่ละทีมตามที่ตกลงกัน ซึ่งบทความนี้จะแนะนำการวางโครงสร้างโปรเจคที่จะทำให้การพัฒนาง่าย และเป็นระบบระเบียบมากขึ้น ไปดูกันเลย++
สำหรับ Packages ทั้งหมดที่ใช้ในบทความนี้ (ซึ่งสามารถปรับ เพิ่ม-ลด ได้ตามความเหมาะสมของงาน)
{
  "dependencies": {
    "cors": "^2.8.5",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "express-jwt": "^5.3.1",
    "express-session": "^1.17.0",
    "moment": "^2.24.0",
    "mongoose": "^5.7.13",
    "mongoose-unique-validator": "^2.0.3",
    "morgan": "^1.9.1",
    "passport": "^0.4.0",
    "passport-jwt": "^4.0.0",
    "passport-local": "^1.0.0"
},
  "scripts": {
    "start": "nodemon app.js"
  }
}รายละเอียดของแต่ละ packages ดังนี้
- cors สำหรับจัดการเกี่ยวกับ Connection ระหว่าง Client และ Server
 - dotenv สำหรับจัดการเกี่ยวกับ Environment Variable
 - express สำหรับจัดการเกี่ยวกับ Request ต่างๆ
 - express-jwt สำหรับจัดการเกี่ยวกับการ Validates JsonWebTokens
 - express-session สำหรับจัดการเกี่ยวกับ Session
 - moment สำหรับจัดการเกี่ยวกับเวลา
 - mongoose สำหรับเป็นเครื่องมือจัดการเกี่ยวกับ Object Model ของ MongoDB
 - mongoose-unique-validator สำหรับจัดการเกี่ยวกับการ Validate field ของ Mongoose Schema
 - morgan สำหรับจัดการเกี่ยวกับ Log
 - passport สำหรับจัดการเกี่ยวกับรูปแบบการยืนยันตัวตน
 - passport-jwt สำหรับจัดการเกี่ยวกับการยืนยันตัวตนด้วย Token
 - passport-local สำหรับการยืนยันตัวตนด้วย email/password
 
Directory Structure
app.js # App entry point└─── configs # Configuration related stuff└─── controllers # Controllers for all the endpoints└─── helpers # Utility function└─── models # Object Models└─── public # Static file└─── routes # Routes for all the endpoints└─── services # Business logic
รายละเอียดของแต่ละโฟลเดอร์ ดังนี้
- configs สำหรับไฟล์ config ต่างๆ
 - controllers สำหรับควบคุมการทำงานของการร้องขอ
 - helpers สำหรับฟังก์ชั่นที่ใช้ร่วมกัน (common)
 - public สำหรับเก็บไฟล์ หรือรูปภาพ
 - routes สำหรับกำหนด เส้นทางการร้องขอ (Request)
 - services สำหรับตรรกะ การคำนวณ ต่างๆ (Logic)
 
สำหรับการทำงานนั้นจะเน้นไปที่การสร้าง module แล้ว export เพื่อให้ส่วนต่างๆ สามารถเรียกใช้งานได้ หากต้องการแก้ไขส่วนไหน ก็จะสามารถทำได้ง่าย เพราะทุกส่วนจะแยกออกจากกันอย่างชัดเจน ทำให้โค้ดเราดู clean และดูเป็นระเบียบมากยิ่งขึ้นด้วย สามารถโหลด source code ไปลองใช้ดูได้เลยครับ
แนวคิดคือ แยกโฟลเดอร์ออกเป็นส่วนๆ ตามการใช้งาน และ Export module ให้ส่วนอื่นๆเรียกใช้งานได้
Source : https://medium.com/@siriphonnot/project-structure-of-restful-api-with-express-js-on-node-js-993fd599e2bb
No comments:
Post a Comment