路由合并_環境配置_常用文件目錄
路由合并
// routes/routes.js
const express = require('express');
const router = express.Router();// 合并子路由
var indexRouter = require('../routes/index');
var usersRouter = require('../routes/users');router.use('/', indexRouter);
router.use('/users', usersRouter);module.exports = router;
app.js 中使用
//路由文件并
const routes = require("./config/routes");
app.use('/', routes);
express路由語法
http://localhost:19997/routes_1/routes_2/auth1/login
協議+ip地址:端口/app.js中綁定的路由+路由文件中的請求定義
http:// | 協議 |
localhost:19997 | ip地址:端口 |
routes_1/routes_2/auth1/ | app.js中綁定的路由 |
login | 路由文件中的請求定義 |
建議將:實際路由文件,和路由文件保持一直,以便于后期維護。
例如:請求URL是: routes_1/routes_2/auth1/login
則文件路徑建議:/routes/routes_1/routes_2/auth1/
而不是隨意的一個路徑
默認app.js內容分析
//導入模塊
var express = require('express'); // 引入 Express 框架
var path = require('path'); // Node.js 內置模塊,用于處理文件路徑
var cookieParser = require('cookie-parser'); // 解析 HTTP Cookie 的中間件
var logger = require('morgan'); // HTTP 請求日志記錄中間件//引入路由文件
var indexRouter = require('./routes/index'); // 主路由(如首頁)
var usersRouter = require('./routes/users'); // 用戶相關路由(如 /users)var app = express(); // 初始化 Express 應用//引用中間件
app.use(logger('dev')); // 使用 morgan 記錄請求日志('dev' 格式)
app.use(express.json()); // 解析 JSON 格式的請求體(如 POST 請求的 JSON 數據)
app.use(express.urlencoded({ extended: false })); // 解析 URL-encoded 請求體(如表單提交)
app.use(cookieParser()); // 解析 Cookie
app.use(express.static(path.join(__dirname, 'public'))); // 托管靜態文件(如 CSS、JS、圖片)//路由掛載
app.use('/', indexRouter); // 所有 / 開頭的請求由 indexRouter 處理
app.use('/users', usersRouter); // 所有 /users 開頭的請求由 usersRouter 處理//導出 app(供 www 或其他文件使用)
module.exports = app;
默認/bin/www內容分析
取端口 → 創建服務器 → 監聽請求,
錯誤時提示,成功時輸出日志
var app = require('../app'); // 加載 app.js 中的 Express 配置
var debug = require('debug')('mide-routes-dotenv-filedir:server'); // 調試日志工具
var http = require('http'); // Node.js 內置 HTTP 模塊var port = normalizePort(process.env.PORT || '3000');//從環境變量讀取端口,如果沒有就用3000
app.set('port', port);var server = http.createServer(app);
server.listen(port);
server.on('error', onError); // 錯誤監聽
server.on('listening', onListening); // 成功啟動監聽/*** 處理端口值為 數字(如 3000)或 字符串*/
function normalizePort(val) {var port = parseInt(val, 10); // 轉為十進制整數if (isNaN(port)) { return val; }// 非數字(如命名管道)直接返回if (port >= 0) { return port; } // 有效端口號return false; // 無效值
}/*** 處理錯誤事件*/
function onError(error) {if (error.syscall !== 'listen') {throw error;}var bind = typeof port === 'string'? 'Pipe ' + port: 'Port ' + port;// handle specific listen errors with friendly messagesswitch (error.code) {case 'EACCES':console.error(bind + ' 需要提升權限');process.exit(1);break;case 'EADDRINUSE':console.error(bind + ' 端口已經被占用 ');process.exit(1);break;default:throw error;}
}/*** Event listener for HTTP server "listening" event.*/function onListening() {var addr = server.address();var bind = typeof addr === 'string'? 'pipe ' + addr: 'port ' + addr.port;debug('Listening on ' + bind);
}
使用dotenv進行環境配置
安裝dotenv
npm install dotenv
VSCode:
左側1:導入路由并導入dotenv中間件require('dotenv').config();
中間2:在請求中打印.env文件
右側3:合并的路由的文件
如果左1和右3為可選的,在app.js中引入中間件require('dotenv').config();
,在其他地方即可直接調用。
常用文件目錄解析
項目根目錄
project/
├── config/ # 配置文件
├── migrations/ # Sequelize 數據庫遷移文件
├── models/ # Sequelize 模型定義
├── routes/ # 路由文件
├── controllers/ # 業務邏輯控制器
├── middlewares/ # 自定義中間件
├── public/ # 靜態資源
├── utils/ # 工具函數
├── tests/ # 測試文件
├── seeders/ # sequlize種子文件
├── app.js # 主應用入口
└── package.json
1. config/ - 配置文件
config/
├── config.js # 主配置文件
├── database.js # 數據庫連接配置
└── passport.js # 認證策略配置(如使用)
2. models/ - Sequelize 模型
models/
├── user.model.js # 用戶模型
├── post.model.js # 文章模型
├── comment.model.js # 評論模型
└── index.js # 模型初始化文件
3. routes/ - 路由定義
routes/
├── auth.routes.js # 認證相關路由
├── post.routes.js # 文章相關路由
├── comment.routes.js # 評論相關路由
└── index.js # 路由聚合文件
4. controllers/ - 業務邏輯
controllers/
├── auth.controller.js # 認證邏輯
├── post.controller.js # 文章邏輯
└── comment.controller.js # 評論邏輯
5. middlewares/ - 自定義中間件
middlewares/
├── auth.middleware.js # 認證中間件
├── error.middleware.js # 錯誤處理
└── validation.middleware.js # 數據驗證
6. migrations/ - 數據庫遷移
migrations/
├── 202301010000-create-user.js
├── 202301010001-create-post.js
└── 202301010002-create-comment.js