首页 >web前端 >js教程 >组织生产就绪的 Node.js 和 Express.js 应用程序

组织生产就绪的 Node.js 和 Express.js 应用程序

DDD
DDD原创
2024-10-11 10:42:30284浏览

프로덕션에 즉시 사용 가능한 Node.js 및 Express.js 애플리케이션을 개발할 때는 명확하고 확장 가능한 폴더 구조를 유지하는 것이 중요합니다. 다음은 향상된 가독성과 관리를 위해 애플리케이션 구성 요소를 구성하는 src 디렉토리 아래에 권장되는 디렉토리 레이아웃입니다.

Organizing a Production-Ready Node.js and Express.js Application

내 앱/
├── src/
│ ├── 구성/
│ │ ├── db.js # 데이터베이스 연결 구성
│ │ ├── appConfig.js # 애플리케이션별 구성 설정
│ │ └── jwtConfig.js # JWT 비밀번호 및 인증 옵션
│ ├── 컨트롤러/
│ │ ├── userController.js # 사용자 관련 엔드포인트를 위한 컨트롤러
│ │ ├── productController.js # 제품 관련 엔드포인트를 위한 컨트롤러
│ │ └── authController.js # 인증 관련 엔드포인트 컨트롤러
│ ├── 미들웨어/
│ │ ├── authMiddleware.js # JWT 토큰 검증을 위한 미들웨어
│ │ ├── errorHandler.js # 중앙 집중식 오류 처리 미들웨어
│ │ └── loggerMiddleware.js # 요청 로깅을 위한 미들웨어
│ ├── 모델/
│ │ ├── userModel.js # 사용자 데이터 모델(스키마)
│ │ └── productModel.js # 제품 데이터 모델(스키마)
│ ├── 노선/
│ │ ├── userRoutes.js # 사용자 관련 작업을 위한 경로
│ │ ├── productRoutes.js # 제품 관련 작업을 위한 경로
│ │ └── authRoutes.js # 인증 경로
│ ├── 서비스/
│ │ ├── userService.js # 사용자 관련 작업을 위한 비즈니스 로직
│ │ ├── productService.js # 제품 관련 작업을 위한 비즈니스 로직
│ │ └── authService.js # 인증을 위한 비즈니스 로직
│ ├── utils/
│ │ ├── logger.js # 메시지 로깅을 위한 로거 유틸리티
│ │ ├── dateFormatter.js # 날짜 형식 지정 유틸리티
│ │ └── responseFormatter.js # 일관된 API 응답을 위한 유틸리티
│ ├── 테스트/
│ │ ├── 컨트롤러/ # 컨트롤러에 대한 단위 테스트
│ │ │ ├── userController.test.js
│ │ │ └── productController.test.js
│ │ ├── services/ # 서비스 단위 테스트
│ │ │ ├── userService.test.js
│ │ │ └── productService.test.js
│ │ └── models/ # 모델 단위 테스트
│ │ ├── userModel.test.js
│ │ └── productModel.test.js
│ ├── .env # 환경변수
│ ├── .gitignore # git에서 무시할 파일 및 폴더
│ ├── README.md # 프로젝트 문서
│ ├── package.json # NPM 패키지 매니페스트
│ └── server.js # 애플리케이션의 주요 진입점
├── .env # 환경변수
├── .gitignore # git에서 무시할 파일 및 폴더
├── README.md # 프로젝트 문서
├── package.json # NPM 패키지 매니페스트
└── package-lock.json # NPM 종속성의 정확한 버전

폴더/파일별 세부 분류

1. src/config/

db.js: 데이터베이스(MongoDB, PostgreSQL 등)에 연결하기 위한 구성입니다.
appConfig.js: 서버 포트 또는 애플리케이션 이름과 같은 애플리케이션에 대한 일반 구성 설정입니다.
jwtConfig.js: 인증을 위한 JSON 웹 토큰과 관련된 비밀 키 및 설정이 포함되어 있습니다.

2. src/컨트롤러/

userController.js: 사용자 관련 HTTP 요청(예: 등록, 사용자 데이터 가져오기)을 처리하는 기능이 포함되어 있습니다.
productController.js: 제품 관련 HTTP 요청을 처리하는 기능이 포함되어 있습니다.
authController.js: 인증 프로세스(로그인, 로그아웃 등)를 처리합니다.

3. src/미들웨어/

authMiddleware.js: Middleware untuk mengesahkan pengguna melalui JWT. Ini menyemak sama ada permintaan datang daripada pengguna yang disahkan.
errorHandler.js: Perisian tengah pengendalian ralat terpusat yang menangkap ralat dan menghantar respons berformat.
loggerMiddleware.js: Log permintaan masuk dan acara penting lain untuk pemantauan.

4. src/models/

userModel.js: Mentakrifkan skema dan model untuk data pengguna, biasanya menggunakan Mongoose untuk MongoDB.
productModel.js: Mentakrifkan skema dan model untuk data produk.

5. src/laluan/

userRoutes.js: Mengandungi laluan yang berkaitan dengan operasi pengguna (cth., pendaftaran, pengurusan profil).
productRoutes.js: Mengandungi laluan yang berkaitan dengan operasi produk.
authRoutes.js: Mengandungi laluan khusus untuk pengesahan.

6. src/services/

userService.js: Mengandungi logik perniagaan yang berkaitan dengan operasi pengguna, memisahkannya daripada pengawal.
productService.js: Mengandungi logik perniagaan yang berkaitan dengan operasi produk.
authService.js: Mengendalikan logik pengesahan, termasuk penjanaan dan pengesahan token.

7. src/utils/

logger.js: Utiliti untuk mengelog mesej dan ralat secara konsisten merentas aplikasi.
dateFormatter.js: Fungsi utiliti untuk memformat objek tarikh.
responseFormatter.js: Menyeragamkan respons API untuk ketekalan.

8. src/tests/

pengawal/: Mengandungi ujian unit untuk setiap pengawal untuk memastikan ia mengendalikan permintaan dengan betul.
perkhidmatan/: Mengandungi ujian unit untuk fungsi perkhidmatan untuk mengesahkan logik perniagaan.
model/: Mengandungi ujian untuk pengesahan dan kefungsian model.

9. Fail Root

.env: Simpan maklumat sensitif seperti kunci API, bukti kelayakan pangkalan data dan pembolehubah persekitaran lain.
.gitignore: Tentukan fail dan direktori yang tidak sepatutnya dijejaki oleh Git (cth., node_modules, .env).
README.md: Dokumentasi tentang projek, cara menyediakannya, arahan penggunaan dan sebarang maklumat lain yang berkaitan.
package.json: Menyenaraikan kebergantungan projek, skrip dan metadata.
package-lock.json: Mengunci versi pergantungan untuk memastikan pemasangan yang konsisten.
server.js: Titik masuk aplikasi, tempat anda memulakan pelayan Express dan middleware.

Contoh Pelaksanaan Fail Utama

src/config/db.js

// src/config/db.js
`const mongoose = memerlukan('mongoose');
const config = require('./appConfig');

const connectDB = async () => {
cuba {
tunggu mongoose.connect(config.MONGODB_URI, {
useNewUrlParser: benar,
useUnifiedTopology: benar,
});
console.log('MongoDB berjaya disambungkan');
} tangkap (ralat) {
console.error('Sambungan MongoDB gagal:', error.message);
process.exit(1);
}
};
module.exports = connectDB;`

src/middleware/authMiddleware.js

// src/middleware/authMiddleware.js
`const jwt = memerlukan('jsonwebtoken');
const config = memerlukan('../config/jwtConfig');

const authMiddleware = (req, res, next) => {
token const = req.headers['kebenaran'];
jika (!token) {
return res.status(403).json({ mesej: 'Akses ditolak. Tiada token disediakan.' });
}

cuba {
const dinyahkod = jwt.verify(token, config.JWT_SECRET);
req.user = dinyahkod;
seterusnya();
} tangkap (ralat) {
kembalikan res.status(401).json({ mesej: 'Token tidak sah.' });
}
};

module.exports = authMiddleware;`

src/server.js

// src/server.js
` const express = memerlukan('express');

const mongoose = require('mongoose');
const dotenv = require('dotenv');
const connectDB = require('./config/db');
const userRoutes = require('./routes/userRoutes');
const ProductRoutes = require('./routes/productRoutes');
const authRoutes = require('./routes/authRoutes');
const errorHandler = require('./middleware/errorHandler');
dotenv.config(); // 从 .env 文件加载环境变量
const app = express();
const PORT = process.env.PORT || 3000;
// 连接数据库
connectDB();
// 中间件
app.use(express.json()); // 解析传入的 JSON 请求
// 路线
app.use('/api/users', userRoutes);
app.use('/api/products', ProductRoutes);
app.use('/api/auth', authRoutes);
// 错误处理中间件
app.use(errorHandler);
// 启动服务器
app.listen(PORT, () => {
console.log(服务器正在 http://localhost:${PORT} 上运行);
});`

结论

通过采用这种结构化方法在 src 目录下组织 Node.js 和 Express.js 应用程序,您可以创建一个易于维护和扩展的生产就绪项目。该组织可以分离问题并提高清晰度,从而随着应用程序的增长实现更好的协作和开发实践。确保为健壮的应用程序实施单元测试、错误处理、日志记录和适当的环境管理。

以上是组织生产就绪的 Node.js 和 Express.js 应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn