认识Web框架
前面我们已经学习了使用
http
内置模块来搭建
Web
服务器,为什么还要使用框架?
原生
http
在进行很多处理时,会较为复杂;
有
URL
判断、
Method
判断、参数处理、逻辑代码处理等,都需要我们自己来处理和封装;
并且所有的内容都放在一起,会非常的混乱;
目前在
Node
中比较流行的
Web
服务器框架是
express
、
koa
;
我们先来学习
express
,后面再学习
koa
,并且对他们进行对比;
express
早于
koa
出现,并且在
Node
社区中迅速流行起来:
我们可以基于
express
快速、方便的开发自己的
Web
服务器;
并且可以通过一些实用工具和中间件来扩展自己功能
Express
整个框架的核心就是中间件,理解了中间件其他一切都非常简单!
Express安装
express
的使用过程有两种方式:
方式一:通过
express
提供的脚手架,直接创建一个应用的骨架;
方式二:从零搭建自己的
express
应用结构;
方式一:安装
express-generator
安装脚手架
npm install -g express-generator
创建项目
express express-demo
安装依赖
npm install
启动项目
node bin/www
方式二:从零搭建自己的
express
应用结构;
npm init –y
npm install express -S
Express的基本使用
我们来创建第一个
express
项目:
我们会发现,之后的开发过程中,可以方便的将请求进行分离:
无论是不同的
URL
,还是
get
、
post
等请求方式;
这样的方式非常方便我们已经进行维护、扩展;
当然,这只是初体验,接下来我们来探索更多的用法;
请求的路径中如果有一些参数,可以这样表达:
/users/:userId
;
在
request
对象中药获取可以通过
req.params.userId;
返回数据,我们可以方便的使用
json
:
res.json(
数据
)
方式;
可以支持其他的方式,可以自行查看文档;
https://www.expressjs.com.cn/guide/routing.html
认识中间件
Express
是一个路由和中间件的
Web
框架,它本身的功能非常少:
Express
应用程序本质上是一系列中间件函数的调用;
中间件是什么呢?
中间件的本质是传递给
express
的一个回调函数;
这个回调函数接受三个参数:
请求对象(
request
对象);
响应对象(
response
对象);
next
函数(在
express
中定义的用于执行下一个中间件的函数);
中间件中可以执行哪些任务呢?
执行任何代码;
更改请求(
request
)和响应(
response
)对象;
结束请求
-
响应周期(返回数据);
调用栈中的下一个中间件;
如果当前中间件功能没有结束请求
-
响应周期,则必须调用
next()
将控制权传递给下一个中间件功能,否则,请求
将被挂起
应用中间件 – 自己编写
那么,如何将一个中间件应用到我们的应用程序中呢?
express
主要提供了两种方式:
app/router.use
和
app/router.methods
;
可以是
app
,也可以是
router
,
router
我们后续再学习
:
methods
指的是常用的请求方式,比如:
app.get
或
app.post
等;
我们先来学习
use
的用法,因为
methods
的方式本质是
use
的特殊情况;
案例一:最普通的中间件
案例二:
path
匹配中间件
案例三:
path
和
method
匹配中间件
案例四:注册多个中间件
应用中间件 – body解析
并非所有的中间件都需要我们从零去编写:
express
有内置一些帮助我们完成对
request
解析的中间件;
registry
仓库中也有很多可以辅助我们开发的中间件;
在客户端发送
post
请求时,会将数据放到
body
中:
客户端可以通过
json
的方式传递;
也可以通过
form
表单的方式传递;
编写解析request body中间件
应用中间件 – express提供
但是,事实上我们可以使用expres内置的中间件或者使用body-parser来完成:
如果我们解析的是 application/x-www-form-urlencoded:
应用中间件 – 第三方中间件
如果我们希望将请求日志记录下来,那么可以使用
express
官网开发的第三方库:
morgan
注意:需要单独安装
上传文件,我们可以使用
express
提供的
multer
来完成:
上传文件中间件 – 添加后缀名
上传文件,我们可以使用express提供的multer来完成:
multer解析form-data
如果我们希望借助于multer帮助我们解析一些form-data中的普通数据,那么我们可以使用any:
客户端发送请求的方式
客户端传递到服务器参数的方法常见的是
5
种:
方式一:通过
get
请求中的
URL
的
params
;
方式二:通过
get
请求中的
URL
的
query
;
方式三:通过
post
请求中的
body
的
json
格式(中间件中已经使用过);
方式四:通过
post
请求中的
body
的
x-www-form-urlencoded
格式(中间件使用过);
方式五:通过
post
请求中的
form-data
格式(中间件中使用过);
传递参数params和query