Node.js 项目的常用命令
Express 的路由配置
RESTful 风格路由
如何获取请求中的数据?
操作数据库的常用方法
我们终于把一个完整的增删改查做出来了,还带了模糊搜索与分页功能。而且代码也做了大量优化,将重复的内容全都进行了封装。这节课的内容,咱们一起来回顾一下,看看都学了些什么东西。
1. Node.js 项目的常用命令
两个全局包
开发Node.js
项目,首先,要全局安装两个包。
先安装了
express
脚手架,这样就可以用命令创建项目。接着安装了
sequelize-cli
,这样才能执行模型、迁移、种子相关的命令。
因为它们都是全局安装的,所以在电脑上,只需要运行一次,就不用重复再次安装了。
与创建项目相关的
当这些都装好了,就要来创建项目了。初始化一个项目的相关步骤有以下这些
创建项目,并指定不需要视图文件。还要记得,要删除 public/index.html 文件。
接着要用 cd 命令,进入项目里。
npm i 安装项目所需依赖包。
安装 nodemon,装完后,记得要配置 package.json,这样修改代码后无需重启服务。
安装 sequelize 与 mysql2 依赖包。这样项目里才能使用 sequelize 操作 mysql。
然后初始化 sequelize,会生成 ORM 所需要的目录和配置文件。记得修改 config/config.json 文件中数据库连接的配置。
npm start 后,就可以通过http://localhost:3000来访问了。
日常开发常用命令
项目建好后,就要开发实际的功能模块了
先要去创建数据库了。也可以使用命令创建,但在部分 Windows 中无法成功创建,那就直接使用 Navicat 手动创建也一样。
然后根据需求,去创建模型。记住模型是单数,但是表名是复数。并指定所需字段和类型,同时还会自动生成相关的迁移文件。
打开迁移文件后,根据需求人工进行调整。改完后,运行迁移命令,就会自动的创建表了。
可以使用种子文件,来给表中添加测试数据,而不用通过 SQL 导入默认测试数据。
根据需求调整种子文件。然后运行一下种子,就会自动填充数据到表里了。
还有个命令,它会运行所有的种子文件。缺点是无论之前有没有运行过,都会全部重新运行一次。所以这个命令只适合数据库还什么数据都没有的情况下。
PS:这些常用命令,大家无需背下来。因为我,也根本背不了这些。每次开发,我都是复制了,根据需求调整一下,直接拿去跑。
2. Express 的路由配置
再来看看路由部分,路由的配置有两部分。
第一个是在根目录的
app.js
里。先要去引用后台的文章路由文件,然后再use
一下
const adminArticlesRouter = require('./routes/admin/articles');
app.use('/admin/articles', adminArticlesRouter);
use
这里,我们写好了一个路径/admin/articles
,那也就是说,这个文件所有的路由,都会以这个地址为开头。
第二个部分就是在
/routes/admin/articles.js
文件里每个方法上的路径配置了。
router.get('/', async function (req, res, next) {
});
3. RESTful 风格路由
每个路由的基础形式都是这样子。不同的是,请求方式可能是get
,也可能是post
、put
或者delete
。
而且大家在开发过程中也发现了,有好几个接口地址都是一样的,只是请求方式不同而已。
这里的请求地址,其实就两种,要么是/admin/articles
,要么就是在后面多跟上了一个:id
。但是却可以对应五个不同的路由方法,就是因为他们前面的请求方式各不相同,这样Express
也能正确的做出区分。
这种路由的定义方式,是非常标准的,它有一个专门的名称,叫做RESTful
。将来大家在其他地方看到RESTful
这个单词,就要明白是怎么回事了。
其实请求方式里,还有一个PATCH
,它也是用来做修改的,它的意思是打补丁
。它的推荐的场景是只更新个别字段,而不是更新整条记录的全部字段。但是这里不推荐大家使用,因为在微信小程序里,对这种请求方式的支持有问题。所以凡是修改请求,我们全部都使用直接用PUT
好了。
4. 如何获取请求中的数据?
这三个方法请大家务必分清楚
req.params,是获取路由里配置了,带
:号
的这种数据req.query,是用来获取带
?号
和&符号
的数据req.body,则是用来获取
POST
、PUT
方式发送过来的数据,最常见的就是表单里的数据。
5. 操作数据库的常用方法
这些方法就是最常用的增删改查方法了。这几个方法,都还是比较简单的,不算难。我们通过方法的名字,就能轻易的分辨,它们是用来干嘛的了。