当前位置: 首页 > 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.lryc.cn/news/616370.html

相关文章:

  • element-ui el-progress在有小数的情况下,会换行显示。解决不换行的问题。
  • iceberg安装部署
  • Rust面试题及详细答案120道(11-18)-- 控制流与函数
  • vulnhub-Drippingblues靶机
  • 通过Certbot自动申请更新HTTPS网站的SSL证书
  • 瑞芯微 RK3588 平台驱动开发 学习计划
  • CST支持对哪些模型进行特征模仿真?分别有哪些用于特征模分析的求解器?
  • C语言——深入理解指针(二)
  • 【东枫科技】FR3 可扩展测试平台,适用于 6G 研究与卫星通信,高达 1.6 GHz 的带宽
  • 【秋招笔试】2025.08.09美团秋招算法岗机考真题-第三题
  • Python 的浅拷贝 vs 深拷贝(含嵌套可变对象示例与踩坑场景)
  • OpenGL VAO 概念、API 和示例
  • 每日一题:使用栈实现逆波兰表达式求值
  • TypeScript中的type和interface的区别是什么?
  • 从街亭失守看管理
  • WAV音频数据集MFCC特征提取处理办法
  • 【MySQL——第三章 :MySQL库表操作】
  • 如何选择适合自己电商业务的 API?​
  • DBAPI 实现不同角色控制查看表的不同列
  • 七、CV_模型微调
  • 使用快捷键将当前屏幕内容滚动到边缘@首行首列@定位到第一行第一个字符@跳转到4个角落
  • Knuth‘s TwoSum Algorithm 原理详解
  • 每日任务day0810:小小勇者成长记之武器精炼
  • 机器学习 DBScan
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-关于我们
  • 人大地平线新国立单目具身导航新范式!MonoDream:基于全景想象的单目视觉语言导航
  • 周学会Matplotlib3 Python 数据可视化-绘制折线图(Lines)
  • python中re模块详细教程
  • 论文阅读:Aircraft Trajectory Prediction Based on Residual Recurrent Neural Networks
  • SupChains团队:化学品制造商 ChampionX 供应链需求预测案例分享(十七)