Kiến trúc tốt là chìa khóa cho bất kỳ thành công phát triển phần mềm nào. Điều này không chỉ đảm bảo quy trình phát triển dễ dàng giữa các nhóm mà còn cả khả năng mở rộng của ứng dụng. Nó đảm bảo rằng bất cứ khi nào cần thay đổi mới, các nhà phát triển sẽ không gặp khó khăn trong việc tái cấu trúc các khía cạnh khác nhau của mã
Kiến trúc MVC
Có nhiều mẫu kiến trúc trong các ngôn ngữ khác nhau như MVT trong Python, MVVM trong Android và MVC trong các ứng dụng JavaScript
Kiến trúc MVC chia toàn bộ ứng dụng thành ba phần;
Mô hình
Phần này xác định dữ liệu của chúng tôi. Đó là nơi đặt các lược đồ và mô hình của chúng tôi, tôi. e bản thiết kế dữ liệu ứng dụng của chúng tôi
Khung nhìn
Điều này bao gồm các mẫu và bất kỳ hình thức tương tác nào khác mà người dùng có với ứng dụng. Đó là nơi dữ liệu được xác định bởi Model của chúng tôi được trình bày cho người dùng
Bộ điều khiển
Logic nghiệp vụ được xử lý trong phần này. Điều này bao gồm việc đọc và ghi cơ sở dữ liệu và bất kỳ sửa đổi nào khác mà dữ liệu trải qua. Điều này kết nối Model và View
Tái cấu trúc thành MVC
Với ý nghĩ đó, chúng ta có thể nhập mã của mình và bắt đầu cấu trúc lại nó để tuân theo mẫu MVC. Mã cơ sở (trước khi thay đổi) có thể được tìm thấy trên Github
Để chuyển ứng dụng của chúng tôi sang mẫu MVC, chúng tôi sẽ cần bộ điều khiển. Lưu ý rằng chúng tôi đã có các mô hình của mình, tôi. e các tệp mô hình trong thư mục models và các chế độ xem của chúng tôi sẽ là các tệp định tuyến trong thư mục const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 0, vì chúng tôi không hiển thị bất kỳ trang nào khi người dùng tương tác với các điểm cuối API
Hãy tiếp tục và tạo một thư mục có tên là const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 1 ở cấp cơ sở. Sau đó, thêm một tệp có tên const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 2 sẽ xử lý tất cả logic của tuyến đường xác thực của chúng tôi
Tiếp theo, thêm các bản xuất sau vào tệp const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 2. Ở đây chúng tôi đang xuất hai chức năng
exports.login = (req, res) => { } exports.signup = (req, res) => { }
Các hàm const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 4 và const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 5 sẽ có quyền truy cập vào phần yêu cầu và phản hồi của các yêu cầu của chúng tôi và chúng tôi sẽ xử lý quy trình đăng ký và đăng nhập tại đây
Trong bộ điều khiển, nhập mô hình const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 6 và const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 7. Sau đó di chuyển toàn bộ các hàm băm mật khẩu và các phương thức CRUD mongoose sang các hàm tương ứng trong tệp điều khiển
Nhập bộ điều khiển vào tệp const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 8. Điều này sẽ cho phép bạn truy cập các chức năng đã xuất. Sau đó, nơi có triển khai const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 4 và const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup); 5, hãy gọi các phương thức của bộ điều khiển tương ứng
const controller = require('../controllers/auth.controller') router.get('/login', controller.login); router.post('/signup', controller.signup);
Trong trường hợp bạn không nhận thấy, chúng tôi đã không di chuyển phương thức const jwt = require('jsonwebtoken') const tokenSecret = process.env.TOKEN_SECRET exports.generateToken = (user) => jwt.sign({data: user}, tokenSecret, {expiresIn: '24h'}) 1. Điều này là do chúng tôi có thể đặt nó trong tệp riêng của nó để bạn có thể sử dụng lại nó trong tất cả các bộ điều khiển. Vì vậy, tôi sẽ tạo một thư mục cấp gốc có tên là const jwt = require('jsonwebtoken') const tokenSecret = process.env.TOKEN_SECRET exports.generateToken = (user) => jwt.sign({data: user}, tokenSecret, {expiresIn: '24h'}) 2 và tạo một tệp có tên là const jwt = require('jsonwebtoken') const tokenSecret = process.env.TOKEN_SECRET exports.generateToken = (user) => jwt.sign({data: user}, tokenSecret, {expiresIn: '24h'}) 3. Và ở đây là nơi tôi sẽ đặt hàm const jwt = require('jsonwebtoken') const tokenSecret = process.env.TOKEN_SECRET exports.generateToken = (user) => jwt.sign({data: user}, tokenSecret, {expiresIn: '24h'}) 1 của mình và bất kỳ hàm nào có thể tái sử dụng khác
const jwt = require('jsonwebtoken') const tokenSecret = process.env.TOKEN_SECRET exports.generateToken = (user) => jwt.sign({data: user}, tokenSecret, {expiresIn: '24h'})
Sau đó, trong bộ điều khiển của tôi, tôi sẽ nhập tệp const jwt = require('jsonwebtoken') const tokenSecret = process.env.TOKEN_SECRET exports.generateToken = (user) => jwt.sign({data: user}, tokenSecret, {expiresIn: '24h'}) 2 để truy cập các chức năng đã xuất
Và cùng với đó, bạn có một số kiến trúc MVC rõ ràng. Điều này tuân theo nguyên tắc “phân tách các mối quan tâm”, trong đó chúng tôi tách mã của mình thành các đơn vị rất nhỏ có thể được xử lý độc lập. Đây là một khía cạnh quan trọng cần tuân theo, đặc biệt là trong một nhóm, để cho phép cộng tác suôn sẻ
Mã được tái cấu trúc hoàn toàn có thể được tìm thấy trên Github
Lưu trữ cạnh
Nút của phần. js Edge Hosting trao quyền cho các nhóm DevOps để chạy Node quan trọng. js ở biên mạng để có kết quả cực nhanh với tính năng bảo vệ AppSec cấp doanh nghiệp