一、认识Web框架
1.前面我们已经学习了使用 http 内置模块来搭建Web服务器,为什么还要使用框架?
- 原生http在进行很多处理时,会较为复杂;
- 有URL判断、Method判断、参数处理、逻辑代码处理等,都需要我们自己来处理和封装;
- 并且所有的内容都放在一起,会非常的混乱;
2.目前在Node中比较流行的Web服务器框架是express、koa;
- 我们先来学习express,后面再学习koa,并且对他们进行对比;
3.express早于koa出现,并且在Node社区中迅速流行起来:
- 我们可以基于express快速、方便的开发自己的Web服务器;
- 并且可以通过一些实用工具和中间件来扩展自己功能;
二、Express框架
PS:Express整个框架的核心就是中间件
2.1 express安装
Express 的使用过程有两种方式
- 通过express提供的脚手架,直接创建一直应用骨架(推荐)
- 从零搭建自己的express应用结构
方式一:
- 安装express-generator脚手架
npm install -g express-generator
- 创建项目
express express-demo
- 安装依赖
npm install
- 启动项目
node bin\www
方式二: 从零搭建自己的express结构
- 初始化
npm init -y
- 在当前目录下安装express
npm install express
- 创建项目基础
创建第一个项目
2.2 认识express中间件
Express是一个路由和中间件的Web框架,它本身的功能非常少: Express应用程序本质上是一系列中间件函数的调用
中间件是什么呢?
中间件的本质是传递给express的一个回调函数;
这个回调函数接受三个参数:
请求对象(request对象)
响应对象(response对象)
next函数(在express中定义的用于执行下一个中间件的函数)
中间件中可以执行哪些任务呢?
执行任何代码;
更改请求(request)和响应(response)对象;
结束请求-响应周期(返回数据);
调用栈中的下一个中间件。
2.3 应用中间件–自己编写
express主要提供了两种方式:app/router.use和app/router.methods。下面先学习use的用法
1. 普通中间件
2. 路径和方法中间件
2.4 应用中间件—body解析(JSON和urlencoded)
- express有内置一些帮助我们完成对request解析的中间件;
- registry仓库中也有很多可以辅助我们开发的中间件;
方式一:编写解析request body 中间件(不推荐)
方式二:用express内置函数
2.5 应用中间件—body解析(form-data)
2.6 应用中间件—body解析(form-data文件上传)
2.7 应用中间件—传递参数params和query
2.8 Express的路由
如果我们将所有的代码逻辑都写在app中,那么app会变得越来越复杂:
- 一方面完整的Web服务器包含非常多的处理逻辑;
- 另一方面有些处理逻辑其实是一个整体,我们应该将它们放在一起。
我们可以使用 express.Router来创建一个路由处理程序:
- 一个Router实例拥有完整的中间件和路由系统;
- 因此,它也被称为 迷你应用程序(mini-app)
完整使用:
创建用户路由(user.js)文件
/** * eg:创建常见一个用户路由 * 请求所有用户信息:get/users * 请求某个用户的信息:get/users/:id * 添加某个用户的信息:post/users body {username:password:} * 删除某个用户的信息:delete/users/:id * 更新某个用户信息:patch/users/:id */ const express = require('express') const userRouter = express.Router(); userRouter.get('/',(req,res,next)=>{ res.json(['elva','eva','egg']) }) userRouter.get('/:id',(req,res,next)=>{ res.json(`${req.params.id}用户信息`) }) userRouter.post('/',(req,res,next)=>{ res.json('create user success') }) module.exports = userRouter
导入使用
const express = require('express') const userRouter = require('./routers/user') const app = express() app.use('/users',userRouter) app.listen(8000,()=>{ console.log('路由服务器启动成功'); })
注意:express的精髓就是对于中间件的使用