首頁 > web前端 > js教程 > 主體

組織生產就緒的 Node.js 和 Express.js 應用程式

DDD
發布: 2024-10-11 10:42:30
原創
211 人瀏覽過

在开发可投入生产的 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: 用於透過 JWT 對使用者進行驗證的中間件。這會檢查請求是否來自經過身份驗證的使用者。
errorHandler.js:集中式錯誤處理中間件,用於捕獲錯誤並發送格式化回應。
loggerMiddleware.js: 記錄傳入請求和其他重要事件以進行監控。

4。 src/models/

userModel.js: 定義使用者資料的架構和模型,通常使用 Mongoose for MongoDB。
productModel.js: 定義產品資料的架構和模型。

5。 src/路線/

userRoutes.js:包含與使用者操作相關的路由(例如註冊、個人資料管理)。
productRoutes.js:包含產品營運相關的路由。
authRoutes.js:包含專門用於驗證的路由。

6。 src/服務/

userService.js:包含與使用者操作相關的業務邏輯,與控制器分離。
productService.js:包含與產品營運相關的業務邏輯。
authService.js:處理驗證邏輯,包括令牌產生和驗證。

7。 src/utils/

logger.js: 用於在整個應用程式中一致記錄訊息和錯誤的實用程式。
dateFormatter.js: 用於格式化日期物件的實用函數。
responseFormatter.js: 標準化 API 回應以確保一致性。

8。 src/測試/

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 mongoose = require('mongoose');
const config = require('./appConfig');

const connectDB = async () => {
嘗試{
等待 mongoose.connect(config.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology:true,
});
console.log('MongoDB 連線成功');
} catch (錯誤) {
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 token = req.headers['授權'];
if (!token) {
return res.status(403).json({ message: '存取被拒絕。未提供令牌。' });
}

嘗試{
const 解碼 = jwt.verify(token, config.JWT_SECRET);
req.user = 已解碼;
下一個();
} catch (錯誤) {
return res.status(401).json({ message: '無效令牌。' });
}
};

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(); // Load environment variables from .env file
const app = express();
const PORT = process.env.PORT || 3000;
// Connect to the database
connectDB();
// Middleware
app.use(express.json()); // Parse incoming JSON requests
// Routes
app.use('/api/users', userRoutes);
app.use('/api/products', productRoutes);
app.use('/api/auth', authRoutes);
// Error Handling Middleware
app.use(errorHandler);
// Start the server
app.listen(PORT, () => {
console.log(Server is running on http://localhost:${PORT});
});`

Conclusion

By adopting this structured approach to organizing your Node.js and Express.js application under the src directory, you can create a production-ready project that is easy to maintain and scale. This organization separates concerns and improves clarity, enabling better collaboration and development practices as your application grows. Be sure to implement unit tests, error handling, logging, and proper environment management for a robust application.

以上是組織生產就緒的 Node.js 和 Express.js 應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!