Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

CheShiping/weiyang_node

Repository files navigation

Express Node Sequelize 项目学习记录

本项目是基于 Express、Node.js 和 Sequelize 的学习项目,用于掌握全栈开发技术。

学习资料

以下是在该项目中参考的学习地址:

  1. Sequelize 全栈开发指南
  2. Express 全栈开发指南

项目结构

.
├── config
│ └── config.json
├── migrations
│ └── 20251201154843-create-article.js
├── models
│ ├── article.js
│ └── index.js
├── public
│ └── stylesheets
│ └── style.css
├── routes
│ ├── admin
│ │ └── article.js
│ ├── index.js
│ └── users.js
├── seeders
│ └── 20251201161825-article.js
├── utils
│ └── response.js
├── README.md
├── app.js
├── package-lock.json
└── package.json

主要技术栈

  • Node.js: JavaScript 运行时环境
  • Express: Web 应用框架
  • Sequelize: ORM (对象关系映射)工具

忽略文件

项目包含 .gitignore 文件,用于忽略不需要进行版本控制的文件和目录,如 node_modules/

提示: 这个咒语,是用来新建模型的,将来大家还会经常用到它的。

sequelize model:generate --name Article --attributes title:string,content:text

后续步骤

根据学习资料逐步完善项目功能,包括但不限于:

  • 数据库模型设计与实现
  • RESTful API 开发
  • 前端页面与后端接口对接
  • 用户认证与权限管理

Sequelize 相关概念说明

config: 是配置的意思,这里放的也就是sequelize所需要的连接数据库的配置文件。

migrations: 是迁移的意思,如果你需要对数据库做新增表、修改字段、删除表等等操作,就需要在这里添加迁移文件了。而不是像以前那样,使用客户端软件来直接操作数据库。

models: 这里面存放的是模型文件,当我们使用sequelize来执行增删改查时,就需要用这里的模型文件了。每个模型都对应数据库中的一张表。

seeders: 是存放的种子文件。一般会将一些需要添加到数据表的测试数据存在这里。只需要运行一个命令,数据表中就会自动填充进一些用来测试内容的了。

查询操作说明

实现查询操作,我们需要使用的传递参数的方式是通过 /articles?title=标题 10 这种形式来实现的。这和我们之前学的 /articles/1 这种形式非常像。它们都是 GET 请求,但是这里多了个 ?,而且是等于的这种格式。这种格式的传值方式,获取数据又不一样了,要用 req.query,这是实现通过关键词搜索东西,非常标准的做法。

白名单过滤

那解决方法很简单,就是不要用 req.body 了。我们可以将 titlecontentreq.body 取出来,如果用户提交了其他的东西,我们一概不管就可以了。通常这种方式,可以叫做白名单过滤,在有的地方也会叫做强参数过滤,不过不管怎么叫,都是一个道理。

大家再看更新文章里,也有 req.body,也是一次性接受了所有的参数。所以这里也需要使用白名单过滤一下数据。

但如果把这段代码再写一遍,又太重复了。所以我们干脆在最底部,定义一个公共的方法,专门供创建文章和更新文章使用。

安全注意事项

🔒 安全原则

永远不要相信用户提交的任何数据
用户提交的数据,一定要做过滤,只保留你需要的内容。
用户提交的数据,一定要做验证
验证最好放在模型里

可以使用 Joi 中间件制作验证规则,再用某一个(忘了)中间件自动执行验证规则,在路由的时候。

1. Node.js 项目的常用命令

两个全局包

开发 Node.js 项目,首先,要全局安装两个包。

命令 说明
npm i -g express-generator@4 安装 express 脚手架
npm i -g sequelize-cli 安装 sequelize 命令行工具

💡 说明
先安装了 express 脚手架,这样就可以用命令创建项目。
接着安装了 sequelize-cli,这样才能执行模型、迁移、种子相关的命令。
因为它们都是全局安装的,所以在电脑上,只需要运行一次,就不用重复再次安装了。

与创建项目相关的步骤

当这些都装好了,就要来创建项目了。初始化一个项目的相关步骤有以下这些:

命令 说明
express --no-view clwy-api 创建项目
cd clwy-api 进入项目里
npm i 安装依赖包
npm i nodemon 安装 nodemon
npm i sequelize mysql2 安装 sequelize 与 mysql2 依赖包
sequelize init 初始化 sequelize
npm start 启动服务

📝 详细说明

  1. 创建项目,并指定不需要视图文件。还要记得,要删除 public/index.html 文件。
  2. 接着要用 cd 命令,进入项目里。
  3. npm i 安装项目所需依赖包。
  4. 安装 nodemon,装完后,记得要配置 package.json,这样修改代码后无需重启服务。
  5. 安装 sequelize 与 mysql2 依赖包。这样项目里才能使用 sequelize 操作 mysql。
  6. 然后初始化 sequelize,会生成 ORM 所需要的目录和配置文件。记得修改 config/config.json 文件中数据库连接的配置。
  7. npm start 后,就可以通过 http://localhost:3000 来访问了。

日常开发常用命令

项目建好后,就要开发实际的功能模块了:

命令 说明
sequelize db:create --charset utf8mb4 --collate utf8mb4_general_ci 创建数据库
sequelize model:generate --name Article --attributes title:string,content:text 创建模型
sequelize db:migrate 运行迁移文件
sequelize seed:generate --name article 创建种子文件
sequelize db:seed --seed xxx-article 运行指定种子文件
sequelize db:seed:all 运行所有种子文件

📝 使用说明

  1. 先要去创建数据库了。也可以使用命令创建,但在部分 Windows 中无法成功创建,那就直接使用 Navicat 手动创建也一样。
  2. 然后根据需求,去创建模型。记住模型是单数,但是表名是复数。并指定所需字段和类型,同时还会自动生成相关的迁移文件。
  3. 打开迁移文件后,根据需求人工进行调整。改完后,运行迁移命令,就会自动的创建表了。
  4. 可以使用种子文件,来给表中添加测试数据,而不用通过 SQL 导入默认测试数据。
  5. 根据需求调整种子文件。然后运行一下种子,就会自动填充数据到表里了。
  6. 还有个命令,它会运行所有的种子文件。缺点是无论之前有没有运行过,都会全部重新运行一次。所以这个命令只适合数据库还什么数据都没有的情况下。

💡 提示
PS:这些常用命令,大家无需背下来。因为我,也根本背不了这些。每次开发,我都是复制了,根据需求调整一下,直接拿去跑。

2. Express 的路由配置

再来看看路由部分,路由的配置有两部分。

第一个是在根目录的 app.js 里:

先要去引用后台的文章路由文件,然后再 use 一下:

const adminArticlesRouter = require('./routes/admin/article');
app.use('/admin/articles', adminArticlesRouter);

📝 use 这里,我们写好了一个路径 /admin/articles,那也就是说,这个文件所有的路由,都会以这个地址为开头。

第二个部分就是在 /routes/admin/article.js 文件里每个方法上的路径配置了:

router.get('/', async function (req, res, next) {
 // ... 处理逻辑
});

3. RESTful 风格路由

请求方式 请求地址 说明
GET /admin/articles 查询文章列表
GET /admin/articles/:id 查询文章详情
POST /admin/articles 创建文章
PUT /admin/articles/:id 更新文章
DELETE /admin/articles/:id 删除文章

每个路由的基础形式都是这样子。不同的是,请求方式可能是 get,也可能是 post、put 或者 delete。

而且大家在开发过程中也发现了,有好几个接口地址都是一样的,只是请求方式不同而已。

这里的请求地址,其实就两种,要么是 /admin/articles,要么就是在后面多跟上了一个 :id。但是却可以对应五个不同的路由方法,就是因为他们前面的请求方式各不相同,这样 Express 也能正确的做出区分。

⚠️ 注意
这种路由的定义方式,是非常标准的,它有一个专门的名称,叫做 RESTful。将来大家在其他地方看到 RESTful 这个单词,就要明白是怎么回事了。

其实请求方式里,还有一个 PATCH,它也是用来做修改的,它的意思是打补丁。它的推荐的场景是只更新个别字段,而不是更新整条记录的全部字段。但是这里不推荐大家使用,因为在微信小程序里,对这种请求方式的支持有问题。所以凡是修改请求,我们全部都使用直接用 PUT 好了。

4. 如何获取请求中的数据?

方法 说明 例子
req.params 获取路由里的参数 /admin/articles/:id
req.query 获取 URL 地址里的查询参数 /admin/articles?title=hello&currentPage=2&pageSize=20
req.body 获取通过 POST、PUT 发送的数据 表单数据等

📝 三个方法的区别

  • req.params:是获取路由里配置了,带 : 号的这种数据
  • req.query:是用来获取带 ? 号和 & 符号的数据
  • req.body:则是用来获取 POST、PUT 方式发送过来的数据,最常见的就是表单里的数据

5. 操作数据库的常用方法

方法 说明
findAll 查询所有记录
findAndCountAll 查询所有记录,并统计数据总数
findByPk 通过主键查询单条数据
create 创建新数据
update 更新数据
destroy 删除数据

这些方法就是最常用的增删改查方法了。这几个方法,都还是比较简单的,不算难。我们通过方法的名字,就能轻易的分辨,它们是用来干嘛的了。

6. 总结

这节课,没有开发新的接口。我们对之前所学的内容,做了一个整体的复习。在掌握了这些基础知识以后,恭喜您,您的 Node.js 技术已经略有小成了。

再往后的课程里,要学习的新知识就不算多了,更多的是真实项目实战相关的内容。

接着,我们马上要学习,如何根据项目需求,设计真实项目的数据库。还要挑战一下,如何在分分钟内,完成另一个完整的增删改查接口。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /