ホームページ  >  記事  >  ウェブフロントエンド  >  本番環境に対応した Node.js および Express.js アプリケーションの編成

本番環境に対応した Node.js および Express.js アプリケーションの編成

DDD
DDDオリジナル
2024-10-11 10:42:30213ブラウズ

在開發可投入生產的 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 # 使用者資料模型(schema)
│ │ └── productModel.js # 產品資料模型(schema)
│ ├── 路線/
│ │ ├── 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 Web 令牌相關的金鑰和設定。

2。 src/控制器/

userController.js:包含處理使用者相關HTTP請求的函數(例如,註冊、取得使用者資料)。
productController.js: 包含處理與產品相關的 HTTP 請求的函數。
authController.js: 處理驗證過程(登入、登出等)。

3。 src/中間件/

authMiddleware.js: Middleware for authenticating users via JWT. This checks if a request is coming from an authenticated user.
errorHandler.js: Centralized error handling middleware that captures errors and sends a formatted response.
loggerMiddleware.js: Logs incoming requests and other important events for monitoring.

4. src/models/

userModel.js: Defines the schema and model for user data, typically using Mongoose for MongoDB.
productModel.js: Defines the schema and model for product data.

5. src/routes/

userRoutes.js: Contains routes related to user operations (e.g., registration, profile management).
productRoutes.js: Contains routes related to product operations.
authRoutes.js: Contains routes specifically for authentication.

6. src/services/

userService.js: Contains business logic related to user operations, separating it from controllers.
productService.js: Contains business logic related to product operations.
authService.js: Handles authentication logic, including token generation and validation.

7. src/utils/

logger.js: Utility for logging messages and errors consistently across the application.
dateFormatter.js: A utility function for formatting date objects.
responseFormatter.js: Standardizes API responses for consistency.

8. src/tests/

controllers/: Contains unit tests for each controller to ensure they handle requests correctly.
services/: Contains unit tests for service functions to verify business logic.
models/: Contains tests for model validations and functionalities.

9. Root Files

.env: Store sensitive information such as API keys, database credentials, and other environment variables.
.gitignore: Specify files and directories that should not be tracked by Git (e.g., node_modules, .env).
README.md: Documentation about the project, how to set it up, usage instructions, and any other relevant information.
package.json: Lists project dependencies, scripts, and metadata.
package-lock.json: Locks dependency versions to ensure consistent installs.
server.js: The entry point of the application, where you initialize the Express server and middleware.

Example Implementation of Key Files

src/config/db.js

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

const connectDB = async () => {
try {
await mongoose.connect(config.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log('MongoDB connected successfully');
} catch (error) {
console.error('MongoDB connection failed:', 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 token = req.headers['authorization'];
if (!token) {
return res.status(403).json({ message: 'Access denied. No token provided.' });
}

try {
const decoded = jwt.verify(token, config.JWT_SECRET);
req.user = decoded;
next();
} catch (error) {
return res.status(401).json({ message: 'Invalid token.' });
}
};

module.exports = authMiddleware;`

src/server.js

// src/server.js
` const express = require('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 = プロセス.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} で実行されています);
});`

結論

この構造化されたアプローチを採用して Node.js および Express.js アプリケーションを src ディレクトリの下に編成することで、保守と拡張が容易な実稼働対応のプロジェクトを作成できます。この組織により、懸念事項が分離され、明確さが向上し、アプリケーションの成長に合わせてより良いコラボレーションと開発プラクティスが可能になります。堅牢なアプリケーションを実現するには、単体テスト、エラー処理、ロギング、および適切な環境管理を必ず実装してください。

以上が本番環境に対応した Node.js および Express.js アプリケーションの編成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。