Menganjurkan Aplikasi Node.js dan Express.js Sedia Pengeluaran

DDD
Lepaskan: 2024-10-11 10:42:30
asal
255 orang telah melayarinya

本番環境に対応した Node.js および Express.js アプリケーションを開発する場合、明確でスケーラブルなフォルダー構造を維持することが重要です。以下は、src ディレクトリの下に推奨されるディレクトリ レイアウトです。これにより、アプリケーション コンポーネントが整理され、読みやすさと管理が向上します。

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

私のアプリ/
§── src/
│ §── config/
│ │ §── 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 # メッセージをログに記録するための Logger ユーティリティ
│ │ §── dateFormatter.js # 日付の書式設定ユーティリティ
│ │ └─ responseFormatter.js # 一貫した API レスポンスのためのユーティリティ
│ §── テスト/
│ │ §──controllers/ # コントローラーの単体テスト
│ │ │ §── 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 パッケージマニフェスト
│ lux──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 Web トークンに関連する秘密キーと設定が含まれています。

2. src/controllers/

userController.js: ユーザー関連の HTTP リクエスト (登録、ユーザー データの取得など) を処理するための関数が含まれています。
productController.js: 製品関連の HTTP リクエストを処理するための関数が含まれています。
authController.js: 認証プロセス (ログイン、ログアウトなど) を処理します。

3. src/ミドルウェア/

authMiddleware.js: JWT를 통해 사용자를 인증하기 위한 미들웨어입니다. 인증된 사용자로부터 요청이 오는지 확인합니다.
errorHandler.js: 오류를 캡처하고 형식화된 응답을 보내는 중앙 집중식 오류 처리 미들웨어.
loggerMiddleware.js: 모니터링을 위해 수신 요청 및 기타 중요한 이벤트를 기록합니다.

4. 소스/모델/

userModel.js: 일반적으로 MongoDB용 Mongoose를 사용하여 사용자 데이터에 대한 스키마와 모델을 정의합니다.
productModel.js: 제품 데이터의 스키마와 모델을 정의합니다.

5. 소스/경로/

userRoutes.js: 사용자 작업(예: 등록, 프로필 관리)과 관련된 경로가 포함되어 있습니다.
productRoutes.js: 제품 운영과 관련된 경로가 포함되어 있습니다.
authRoutes.js: 인증을 위한 경로가 포함되어 있습니다.

6. 소스/서비스/

userService.js: 사용자 작업과 관련된 비즈니스 로직을 컨트롤러와 분리하여 포함합니다.
productService.js: 제품 운영과 관련된 비즈니스 로직이 포함되어 있습니다.
authService.js: 토큰 생성 및 유효성 검사를 포함한 인증 논리를 처리합니다.

7. src/utils/

logger.js: 애플리케이션 전반에 걸쳐 메시지와 오류를 일관되게 기록하는 유틸리티입니다.
dateFormatter.js: 날짜 객체 형식을 지정하는 유틸리티 함수
responseFormatter.js: 일관성을 위해 API 응답을 표준화합니다.

8. 소스/테스트/

controllers/: 요청을 올바르게 처리하는지 확인하기 위해 각 컨트롤러에 대한 단위 테스트가 포함되어 있습니다.
services/: 비즈니스 로직을 검증하기 위한 서비스 기능에 대한 단위 테스트가 포함되어 있습니다.
models/: 모델 검증 및 기능에 대한 테스트가 포함되어 있습니다.

9. 루트 파일

.env: API 키, 데이터베이스 자격 증명, 기타 환경 변수 등 중요한 정보를 저장합니다.
.gitignore: Git에서 추적하지 않아야 하는 파일 및 디렉터리를 지정합니다(예: node_modules, .env).
README.md: 프로젝트에 대한 문서, 설정 방법, 사용 지침 및 기타 관련 정보
package.json: 프로젝트 종속성, 스크립트 및 메타데이터를 나열합니다.
package-lock.json: 일관된 설치를 보장하기 위해 종속성 버전을 잠급니다.
server.js: Express 서버와 미들웨어를 초기화하는 애플리케이션의 진입점입니다.

키 파일 구현 예시

src/config/db.js

//src/config/db.js
`const 몽구스 = require('몽구스');
const config = require('./appConfig');

const connectDB = async () => {
시도해보세요 {
mongoose.connect를 기다립니다(config.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log('MongoDB가 성공적으로 연결되었습니다');
} 잡기(오류) {
console.error('MongoDB 연결 실패:', error.message);
process.exit(1);
}
};
module.exports = connectDB;`

src/middleware/authMiddleware.js

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

const authMiddleware = (req, res, next) => {
const 토큰 = req.headers['authorization'];
if (!token) {
return res.status(403).json({ 메시지: '액세스가 거부되었습니다. 제공된 토큰이 없습니다.' });
}

해 보세요 {
const decoded = jwt.verify(token, config.JWT_SECRET);
req.user = 디코딩됨;
다음();
} 잡기(오류) {
return res.status(401).json({ 메시지: '잘못된 토큰.' });
}
};

module.exports = authMiddleware;`

src/server.js

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

const mongoose = memerlukan('mongoose');
const dotenv = memerlukan('dotenv');
const connectDB = memerlukan('./config/db');
const userRoutes = memerlukan('./routes/userRoutes');
const productRoutes = memerlukan('./routes/productRoutes');
const authRoutes = memerlukan('./routes/authRoutes');
const errorHandler = memerlukan('./middleware/errorHandler');
dotenv.config(); // Muatkan pembolehubah persekitaran daripada fail .env
aplikasi const = express();
const PORT = process.env.PORT || 3000;
// Sambungkan ke pangkalan data
connectDB();
// Middleware
app.use(express.json()); // Menghuraikan permintaan JSON yang masuk
// Laluan
app.use('/api/users', userRoutes);
app.use('/api/products', productRoutes);
app.use('/api/auth', authRoutes);
// Ralat Mengendalikan Middleware
app.use(errorHandler);
// Mulakan pelayan
app.listen(PORT, () => {
console.log(Pelayan sedang berjalan pada http://localhost:${PORT});
});`

Kesimpulan

Dengan menggunakan pendekatan berstruktur ini untuk mengatur aplikasi Node.js dan Express.js anda di bawah direktori src, anda boleh mencipta projek sedia pengeluaran yang mudah diselenggara dan berskala. Organisasi ini memisahkan kebimbangan dan meningkatkan kejelasan, membolehkan kerjasama dan amalan pembangunan yang lebih baik apabila aplikasi anda berkembang. Pastikan anda melaksanakan ujian unit, pengendalian ralat, pengelogan dan pengurusan persekitaran yang betul untuk aplikasi yang mantap.

Atas ialah kandungan terperinci Menganjurkan Aplikasi Node.js dan Express.js Sedia Pengeluaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan