记录一下使用express + mysql 搭建nodejs项目流程,项目是使用 express-generator
进行创建的。
express + mysql搭建nodejs服务端项目流程系列文章链接:
01、express + mysql搭建nodejs服务端项目流程(一)——使用express-generator创建项目
02、express + mysql搭建nodejs服务端项目流程(二)——添加打印日志winston和mysql相关依赖
03、express + mysql搭建nodejs服务端项目流程(三)——使用joi、crypto-js和jwt等技术完善注册登录接口
以下是关于 Express Generator 的作用、使用方式、生成项目的目录结构解析,以及各依赖包的详细说明:
一、Express Generator 的作用
Express Generator 是一个命令行工具,用于快速生成 Express 应用的骨架代码。它的核心价值在于:
- 标准化项目结构
自动创建符合 Express 最佳实践的目录和文件。 - 快速启动开发
省去手动配置路由、中间件、视图引擎等基础代码的时间。 - 模板化配置
预置常用依赖(如日志、静态文件处理、错误处理等)。 - 灵活定制
支持选择视图引擎(如 EJS、Pug)、CSS 预处理器等。
二、Express Generator 的使用方式
1. 安装工具
全局安装 express-generator
:
npm install -g express-generator
2. 生成项目
使用以下命令创建项目(以生成名为 myapp
的项目为例):
2.1、直接创建
express myapp (myapp 是项目名) # 直接创建,目前直接创建是选择 jade 作为模板引擎
2.2、指定模板引擎创建
express --view=pug myapp # 选择 Pug 作为模板引擎
3. 安装依赖
进入项目目录并安装依赖:
cd myapp
npm install
4. 启动项目
npm start
访问 http://localhost:3000
即可看到默认页面。
4.1、安装 nodemon
可以安装 nodemon 来监控 node.js 源代码的任何变化和自动重启你的服务器。
全局安装 nodemon:
npm install -g nodemon
安装 nodemon后项目启动方式:
nodemon bin/www
4.2、修改package.json文件,如果下图所示
修改后可以用 npm start 命令启动项目,达到 nodemon bin/www 命令启动项目一样的效果
三、项目目录结构详解
以下是生成的目录结构及其作用:
myapp/
├── **bin/** # 启动脚本目录
│ └── **www** # Node.js 服务器入口脚本(配置端口、HTTP服务)
│
├── **public/** # 静态资源目录(浏览器可直接访问)
│ ├── **stylesheets/** # CSS 文件
│ ├── **images/** # 图片
│ └── **javascripts/** # 客户端 JavaScript
│
├── **routes/** # 路由定义目录
│ ├── **index.js** # 根路径路由处理
│ └── **users.js** # 用户相关路由示例
│
├── **views/** # 模板文件目录(如 Pug、EJS)
│ ├── **error.pug** # 错误页面模板
│ ├── **index.pug** # 首页模板
│ └── **layout.pug** # 全局布局模板
│
├── **app.js** # 应用主入口(中间件、路由挂载、错误处理)
└── **package.json** # 项目依赖和脚本配置
四、核心依赖包详解
1. express
- 作用:Node.js 的 Web 框架,提供路由、中间件等核心功能。
- 使用方式:在
app.js
中创建应用实例:const express = require('express'); const app = express();
2. body-parser
- 作用:解析 HTTP 请求体(如 JSON、URL-encoded 数据)。
- 使用方式:在
app.js
中配置: - 自 Express 4.16.0 版本开始,不需要安装body-parser这个中间件,Express 已经内置了,所以直接使用即可
app.use(express.json()); // 解析 JSON app.use(express.urlencoded({ extended: false })); // 解析表单数据
3. cookie-parser
- 作用:解析 Cookie 数据。
- 使用方式:在
app.js
中启用:const cookieParser = require('cookie-parser'); app.use(cookieParser());
4. morgan
- 作用:HTTP 请求日志中间件。
- 使用方式:在
app.js
中配置日志格式:const logger = require('morgan'); app.use(logger('dev')); // 输出简短日志(如 GET / 200 5ms)
5. debug
- 作用:调试信息输出工具(按命名空间控制日志)。
- 使用方式:在
bin/www
中记录服务器状态:const debug = require('debug')('myapp:server'); debug('Server listening on port 3000');
6. http-errors
- 作用:创建 HTTP 错误对象(如 404、500)。
- 使用方式:在路由中抛出错误:
const createError = require('http-errors'); app.use((req, res, next) => { next(createError(404)); // 触发 404 错误处理 });
7. pug (原 jade)
- 作用:模板引擎,动态渲染 HTML。
- 使用方式:在
app.js
中配置视图引擎:app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'pug');
五、其他重要文件说明
1. bin/www
- 作用:启动 HTTP 服务器的入口脚本。
- 关键代码:
const server = http.createServer(app); server.listen(port); server.on('error', onError); // 处理端口冲突等错误
2. app.js
- 作用:应用配置中心,包含中间件、路由挂载和错误处理。
- 关键配置:
// 静态文件托管 app.use(express.static(path.join(__dirname, 'public'))); // 路由挂载 app.use('/', indexRouter); app.use('/users', usersRouter); // 错误处理中间件 app.use((err, req, res, next) => { res.locals.message = err.message; res.status(err.status || 500); res.render('error'); // 渲染错误页面 });
六、依赖关系总结
依赖包 | 用途 | 典型代码位置 |
---|---|---|
express | Web 框架核心 | app.js |
body-parser | 解析请求体数据 | app.js 中间件配置 |
cookie-parser | 解析 Cookie | app.js 中间件配置 |
morgan | 记录 HTTP 请求日志 | app.js 中间件配置 |
debug | 调试信息输出 | bin/www |
http-errors | 创建 HTTP 错误对象 | 路由错误处理 |
pug | 模板引擎渲染 HTML | views/*.pug |
七、项目启动流程
- 用户访问
http://localhost:3000
。 bin/www
启动服务器并监听端口。- 请求进入
app.js
,依次通过中间件(如日志、静态文件处理)。 - 路由匹配到
routes/index.js
,渲染views/index.pug
。 - 若发生错误(如 404),跳转到错误处理中间件。
八、配置 cors 跨域
1、运行如下的命令,安装 cors
中间件:
npm install cors
- 在
app.js
中导入并配置cors
中间件:
// 导入 cors 中间件
const cors = require('cors')
// 将 cors 注册为全局中间件
app.use(cors())
更多的关于cors跨域的知识点记录在下面的文章中:
跨域问题深度解析与Node.js解决方案实践
九、扩展建议
- 添加新路由:在
routes/
下新建文件,并在app.js
中挂载。 - 更换模板引擎:使用
express-generator --view=ejs
生成 EJS 项目。 - 集成数据库:添加
mongoose
或sequelize
依赖操作 MongoDB/MySQL。
通过 Express Generator,开发者可以快速搭建符合规范的 Express 应用,专注于业务逻辑而非基础配置。