当前位置: 首页 > news >正文

NodeJs学习日志(4):路由合并_环境配置_常用文件目录

路由合并_环境配置_常用文件目录

路由合并

// 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:19997ip地址:端口
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
http://www.dtcms.com/a/324338.html

相关文章:

  • HarmonyOS之module.json5功能详解
  • AI测试助手如何让Bug无处可藏
  • 湖南(源点咨询)市场调研 如何在行业研究中快速有效介入 中篇
  • 深入浅出DBSCAN:基于密度的聚类算法详解与Python实战
  • github上传文件
  • Navicat 无限适用
  • Tesseract训练个人字库操提高准确率操作全流程(详细)
  • 新手向:Python制作简易音乐播放器
  • Python中的 __name__
  • 遇到前端导出 Excel 文件出现乱码或文件损坏的问题
  • 异或循环冗余
  • Python设计模式 - 装饰模式
  • 新手向:Python实现文件加密解密工具
  • 旅行者1号无线电工作频段
  • 18.3 全量微调:数据预处理之清洗与准备
  • 机器学习——DBSCAN 聚类算法 + 标准化
  • 实现两个开发板的串口通讯(基于STC8实现)
  • 复刻苏宁易购(移动端)
  • 【GPT入门】第44课 检查 LlamaFactory微调Llama3的效果
  • cursor, vscode黄色波浪线警告问题
  • React:useEffect 与副作用
  • 小巧实用的工具——ZoomIt
  • 【C++对象诞生全解析】构造函数:从内存布局到高效初始化的终极指南
  • 152-基于CWT-CNN-BiGRU-Attention-SABO-LSSVM对滚动轴承的故障诊断
  • spring-boot-starter-data-redis 与 org.redisson 区别 联系
  • 【递归、搜索与回溯算法】深度优先搜索
  • Text2SQL 自助式数据报表开发(Chat BI)
  • 《解锁 C++ 起源与核心:命名空间用法 + 版本演进全知道》
  • Spring Boot 注解详解:@RequestMapping 的多种用法
  • Docker 跨主机容器之间的通信macvlan