1. Giới thiệu cấu trúc thư mục
Alloy/
├── app/
│ ├── controllers/
│ ├── models/
│ ├── views/
│ └── routes.js
├── config/
│ ├── database.js
│ ├── environment.js
│ └── settings.js
├── public/
│ ├── css/
│ ├── js/
│ └── images/
├── test/
│ ├── unit/
│ └── integration/
├── .env
├── .gitignore
├── package.json
└── server.js
Giải thích cấu trúc thư mục:
- app/: Chứa mã nguồn chính của ứng dụng, bao gồm các thành phần điều khiển, mô hình dữ liệu, giao diện người dùng và định nghĩa đường dẫn.
- controllers/: Lưu trữ các tệp điều khiển xử lý logic nghiệp vụ.
- models/: Định nghĩa cấu trúc dữ liệu và tương tác với cơ sở dữ liệu.
- views/: Quản lý phần hiển thị phía trước cho người dùng.
- routes.js: Cấu hình các tuyến đường truy cập trong ứng dụng.
- config/: Lưu trữ các tập tin cấu hình cần thiết như kết nối cơ sở dữ liệu, cài đặt môi trường và thông số toàn cầu.
- database.js: Xử lý kết nối và cấu hình cơ sở dữ liệu.
- environment.js: Thiết lập các biến môi trường.
- settings.js: Lưu giữ các tùy chọn toàn cục của ứng dụng.
- public/: Lưu trữ tài nguyên tĩnh như CSS, JavaScript và hình ảnh.
- css/: Lưu file kiểu dáng (style).
- js/: Lưu file script JavaScript.
- images/: Lưu trữ hình ảnh.
- test/: Chứa các kịch bản kiểm thử đơn vị và tích hợp.
- unit/: Kiểm thử từng phần nhỏ.
- integration/: Kiểm thử sự tương tác giữa các phần.
- .env: File lưu trữ thông tin nhạy cảm và cấu hình.
- .gitignore: Quy định những gì không cần đưa vào kiểm soát phiên bản Git.
- package.json: Cấu hình phụ thuộc và kịch bản chạy.
- server.js: Tập tin khởi động ứng dụng.
2. Tập tin khởi động dự án
server.js
server.js là tập tin khởi tạo ứng dụng, chịu trách nhiệm kích hoạt dịch vụ và lắng nghe trên cổng chỉ định. Dưới đây là cấu trúc cơ bản của server.js:
const express = require('express');
const application = express();
const portNumber = process.env.PORT || 4000;
// Tải cấu hình từ file
require('./config/environment');
// Kết nối các đường dẫn
application.use(require('./app/routes'));
// Khởi chạy máy chủ
application.listen(portNumber, () => {
console.log(`Dịch vụ đang chạy tại cổng ${portNumber}`);
});
Giải thích về tập tin khởi động:
- express: Thư viện Express được sử dụng để xây dựng ứng dụng web.
- application: Khởi tạo một đối tượng ứng dụng Express.
- portNumber: Chỉ định cổng mà ứng dụng sẽ lắng nghe; ưu tiên lấy từ biến môi trường hoặc mặc định là 4000.
- require('./config/environment'): Nhập cấu hình môi trường từ file cấu hình.
- application.use(...): Áp dụng các tuyến đường dẫn đã định nghĩa.
- application.listen(...): Bắt đầu dịch vụ và giám sát cổng.
3. Các tập tin cấu hình
config/database.js
Tập tin database.js quản lý việc kết nối cơ sở dữ liệu. Ví dụ cấu trúc cơ bản:
const mongoose = require('mongoose');
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const dbConnection = mongoose.connection;
dbConnection.on('error', error => console.error('Lỗi kết nối:', error));
dbConnection.once('open', () => console.log('Kết nối cơ sở dữ liệu thành công'));
Chi tiết cấu hình:
- mongoose.connect(...): Thực hiện kết nối tới cơ sở dữ liệu MongoDB bằng chuỗi kết nối từ biến môi trường.
- dbConnection.on('error', ...): Xử lý lỗi nếu xảy ra khi kết nối.
- dbConnection.once('open', ...): Thông báo khi kết nối thành công.
config/environment.js
Tập tin environment.js tải các biến môi trường từ .env. Ví dụ cấu trúc:
const dotenv = require('dotenv');
dotenv.config();
module.exports = {
PORT: process.env.PORT,
MONGO_URI: process.env.MONGO_URI,
// Các biến môi trường khác
};
Chi tiết cấu hình:
- dotenv.config(): Đọc nội dung từ file
.env. - module.exports: Xuất các giá trị môi trường để sử dụng ở các nơi khác.
config/settings.js
Tập tin settings.js chứa các thông số toàn cục của ứng dụng. Ví dụ cấu trúc:
module.exports = {
appName: 'Alloy',
version: '1.0.0',
// Các cài đặt toàn cục khác
};
Chi tiết cấu hình:
- module.exports: Xuất tên ứng dụng và phiên bản để có thể truy xuất toàn cầu.
Qua hướng dẫn này, bạn đã hiểu rõ hơn về cấu trúc thư mục, tập tin khởi động và các tập tin cấu hình của dự án Alloy.