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

路由合并

// 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.pswp.cn/diannao/95027.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95027.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95027.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

✨TRAE SOLO + Holopix AI | 轻松实现 “虚假广告“-转[特殊字符]割草小游戏

引言 😶 两周前 (7.21) Trae-国际版 正式发布「SOLO」模式,需要 Pro 账户,邀请码一度 “难求”,海鲜市场还有人挂出 500块的 “天价”,这都能炒?我是无法理解的🤷‍♀️,目前一个月…

redis集群-本地环境

* Linux 本地集群:3主3从yum install -y gccyum install -y wgetyum install -y vimwget http://download.redis.io/releases/redis-7.2.5.tar.gztar -zxvf redis-7.2.5.tar.gzcd redis-7.2.5/makemake PREFIX/usr/local/redis install# 配置系统环境变量vim /etc/p…

海关 瑞数 失信企业 逆向 分析 后缀 rs

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!部分python代码headers {Accept: appl…

用 Postman 的 Tests 脚本,这行代码断言接口返回,自动化测试省一半事

本文聚焦 Postman 的 Tests 脚本在接口自动化测试中的核心作用,阐述如何通过编写 Tests 脚本实现接口返回的自动断言,从而大幅提升测试效率。文中详细介绍了 Tests 脚本的基础语法、常用断言方法、实战案例及优化技巧,涵盖从简单响应状态码校…

7、西门子PLC基础术语:数据单位、存储区域、寻址方式、字节序

一、数据单位(数据长度类型)术语名称位数所占字节说明Bit位1 bit1/8 Byte最小数据单位(0或1)BByte 字节8 bit1 Byte字节单位WWord 字16 bit2 Byte通常用于整数、状态字等DWDouble Word 双字32 bit4 Byte常用于浮点、双整数 1双字 …

大型动作模型LAM:让企业重复任务实现80%效率提升的AI技术架构与实现方案

现代企业运营中,重复性任务的自动化处理已成为提升组织效率的核心需求。从基础数据录入到复杂工作流管理,企业持续寻求技术创新来降低人工成本、减少操作错误,并将人力资源重新配置到更具价值的战略性工作中。大型动作模型(Large …

部署Web UI自动化测试平台:SeleniumFlaskTester

1. Python环境准备 推荐Python3.11,可从https://www.python.org/downloads/release/python-3119/ 下载,见下图: 安装后,cmd命令行查看版本:python --version 2. 下载源码包 从 https://gitee.com/ligaopan/SeleniumFlaskTester…

计算机网络:到底什么是可变长子网掩码VLSM?

VLSM 是可变长子网掩码,对应的是 FLSM(固定长子网掩码) FLSM 中,子网掩码是固定的,比如一个 C 类地址用 255.255.255.128(/25)划分,每个子网只能有 126 台主机,但如果实际需要的主机数不同,比如有的子网需要 20 台,有的需要 50 台,FLSM 会导致地址浪费。所以 VLSM …

太极行业观察:从传统技艺到数字化转型的演变|创客匠人

太极拳作为中华传统文化的重要组成部分,在全球范围内具有广泛影响力。目前全球太极习练者已超过一亿人,仅中国大陆就有约千万固定练习者。每年与太极相关的赛事、培训、教学、养生旅游等活动,形成了数百亿元的市场规模。尽管如此,…

Kafka服务端NIO操作原理解析(二)

Kafka系列文章 基于Kafka2.1解读Producer原理 基于Kafka2.1解读Consumer原理 Kafka服务端NIO操作原理解析(一) 文章目录Kafka系列文章前言一、基本认知二、Acceptor的主体流程2.1 run方法源码2.2 acceptNewConnections方法源码2.3 主体逻辑流程示意图三…

当服务器负载过高时该怎么办?

当服务器出现负载过高时,要对内存、网络等硬件设备进行查看,其中CPU是重中之重,对CPU使用率进行查看和了解,确定哪些进程占用了大量CPU资源,如果是某个应用程序进程导致CPU高负载,需分析该程序是否存在算法…

跨境电商增长突围:多维变局下的战略重构与技术赋能

在全球化商业浪潮与数字技术迭代的双重驱动下,跨境电商行业正经历前所未有的变革。平台规则的动态调整、市场需求的非线性波动、技术工具的持续革新,共同构成了复杂多变的竞争格局。对于卖家而言,如何在不确定性中锚定增长路径,已…

软件运行时 ffmpeg.dll 丢失怎么办?从原因排查到完美修复的完整方案

在计算机的软件生态系统中,ffmpeg.dll 扮演着一个至关重要却又常被普通用户忽视的角色。这个看似普通的文件,实际上是众多多媒体相关软件能够正常运行的基石之一。当你的视频剪辑软件突然无法导入特定格式的视频,或者心爱的游戏在启动时弹出令…

Axure 11

下载 Axure RP - UX Prototypes, Specifications, and Diagrams in One Tool 激活 Axure RP11 2025-8-7日亲测有效: 49bb9513c40444b9bcc3ce49a7a022f9 汉化 Axure Rp 11 安装、汉化、授权_axure11汉化包-CSDN博客 中文社区 https://www.axure.com.cn/

论文阅读:User Behavior Simulation with Large Language Model-based Agents

https://dl.acm.org/doi/pdf/10.1145/3708985 https://www.doubao.com/chat/15495707526837250 Advances and Challenges in Foundation Agents–Memory调研 论文翻译 基于大型语言模型代理的用户行为模拟 摘要 在推荐系统、社交网络等以人为中心的应用中,高质…

基于ECharts的智慧社区数据可视化

引言数据可视化是现代Web应用的重要组成部分,它能将复杂的数据以直观的图形方式呈现,帮助用户快速理解数据背后的信息。本文将介绍如何使用ECharts库实现智慧社区住户数据的可视化展示,包括柱状图和饼图两种常见图表类型的实现与优化。技术栈…

Qt 综述:从基础到一般应用

摘要: Qt,作为久经考验的跨平台C开发框架,以其强大的功能、丰富的类库和灵活的机制,在桌面应用、嵌入式系统、网络编程等领域占据重要地位。本文将深入解析Qt的核心技术体系,涵盖基础架构、核心机制、UI开发、外观定制…

基于PyTorch一文讲清楚损失函数与激活函数并配上详细的图文讲解

PyTorch损失函数与激活函数 目录 激活函数详解损失函数详解实战案例性能优化技巧 激活函数详解 1. 什么是激活函数? 激活函数是神经网络中的关键组件,它决定了神经元是否应该被激活。没有激活函数,神经网络就只是线性变换的堆叠&#xf…

苍穹外卖-Day1 | 环境搭建、nginx、git、令牌、登录加密、接口文档、Swagger

目录 nginx: nginx反向代理和负载均衡概念 nginx反向代理和负载均衡如何配置? 后端环境:maven管理 sky-common sky-pojo sky-server: 后端环境搭建--Git进行版本控制 后端数据库--Mysql 前后端联调 前后端运行&#xf…

论文阅读-ZeroDCE和ZeroDCE++

文章目录1 概述2 模块2.1 总体说明2.2 LE曲线(Light Enhance Curve)2.3 DCE-Net2.4 无监督损失2.4.1 空间一致性损失2.4.2 曝光控制损失2.4.3 颜色恒定损失2.4.4 照明平滑度损失2.5 ZeroDCE3 效果3.1 不同损失函数组合的效果3.2 参数设置影响3.3 训练数据…