作為初級開發人員,建立 Node.js 後端最具挑戰性的方面之一不是編寫程式碼本身 - 而是以可擴展的方式組織程式碼。今天,我們將探索一個可用於生產的 Node.js 專案結構,您可以將其用作應用程式的範本。
非結構化程式碼的問題
在我們深入研究之前,想像嘗試在圖書館中找到一本特定的書,那裡的書是隨機放置在書架上的。令人沮喪,對吧?這同樣適用於程式碼。如果沒有適當的結構,您的 Node.js 應用程式很快就會變成義大利麵條式程式碼的迷宮,難以維護和擴展。
更好的方法:現代 Node.js 專案結構
讓我們分解許多成功公司使用的專業級 Node.js 專案結構:
?後端/
├─? src/
│ └── ? @types # TypeScript 類型定義
│ └──? config # 設定檔
│ └── ?控制器 # 請求處理程序
│ └── ?實體 # 資料庫模型/實體
│ └── ? helper # 輔助/實用函數
│ └── ? middlewares # Express 中間件
│ └── ? paths # API 路由定義
│ └── ? services # 業務邏輯
│ └── ? types # 附加型別定義
│ └── ? utils # 實用函數
└──? app.ts # 應用程式入口點
└──? .eslintrc.js # ESLint 設定
└──? .prettierrc # 更漂亮的配置
└──? Dockerfile # Docker 配置
└──? package.json # 專案依賴
└──? tsconfig.json # TypeScript 配置
└──? .dockerignore # Docker 忽略規則
└──? .env # 環境變數
└──? docker-compose.yml # Docker Compose 配置
了解每個組件
1. @型別與型別目錄
`// @types/express/index.d.ts declare namespace Express { export interface Request { user?: { id: string; role: string; }; } }`
這些資料夾包含 TypeScript 類型定義。 @types 資料夾通常包含外部模組的聲明,而 types 保存特定於應用程式的類型。
2。配置目錄
// config/database.ts export const dbConfig = { host: process.env.DB_HOST, port: process.env.DB_PORT, username: process.env.DB_USER, // … other configuration };
目錄包含所有設定文件,可以輕鬆管理不同的環境(開發、登台、生產)。
3。控制器
// controllers/userController.ts export class UserController { async getUser(req: Request, res: Response) { try { const user = await userService.findById(req.params.id); res.json(user); } catch (error) { res.status(500).json({ error: error.message }); } } }
控制器處理 HTTP 請求和回應,充當路由和服務之間的橋樑。
4。實體
typescript// entity/User.ts @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() username: string; @Column() email: string; }
實體目錄包含您的資料庫模型,通常使用 TypeORM 或 Sequelize 等 ORM。
5。服務
services/userService.ts export class UserService { async createUser(userData: CreateUserDto) { const user = new User(); Object.assign(user, userData); return await this.userRepository.save(user); } }
服務包含您的業務邏輯,使其與控制器分開。
6。中介軟體
`// @types/express/index.d.ts declare namespace Express { export interface Request { user?: { id: string; role: string; }; } }`
中間件處理橫切問題,例如驗證、日誌記錄和錯誤處理。
最佳實務與技巧
1。單一職責: 每個目錄都應該有明確的、單一的目的。不要將業務邏輯與路由定義混合在一起。
2。依賴注入:使用依賴注入讓你的程式碼更容易測試和維護。
// config/database.ts export const dbConfig = { host: process.env.DB_HOST, port: process.env.DB_PORT, username: process.env.DB_USER, // … other configuration };
3。環境配置:使用.env檔案作為環境特定的變量,並且永遠不要將它們提交到版本控制。
4。 Docker 整合: Dockerfile 和 docker-compose.yml 的存在表明容器化支持,使跨環境的部署保持一致。
要避免的常見陷阱
循環依賴:小心不要在模組之間創建循環依賴。
海量文件:如果文件變得太大,則可能是做得太多了。將其分成更小、更集中的模組。
不一致的錯誤處理:在您的應用程式中建立一致的錯誤處理策略。
結論
結構良好的 Node.js 應用程式對於長期可維護性和可擴展性至關重要。此結構提供了堅實的基礎,您可以隨著應用程式的成長而建立該基礎。請記住,我們的目標不僅僅是讓它發揮作用,而是讓它可維護、可擴展並且使用起來愉快。
下次啟動新的 Node.js 專案時,請考慮使用此結構作為範本。它將節省您無數的重構時間,並使您的程式碼庫從第一天起就更加專業。
專業提示:使用此結構建立範本儲存庫,以便您可以快速啟動具有相同組織的新專案。
以上是Node.js 後端建立可擴展的應用程式:專案結構實用指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!