目录
使用express.static()快速托管静态资源
使用express路由精简项目结构
使用常见的express中间件
使用express创建API接口
在express中启用跨域或资源共享
初识Express
简介
express:专门用来创建Web服务器的。
npm的一个得三方的包。
express更加方便,功能更加强大。
常见的两种服务器:Web网站服务器:提供网页资源的服务器
API接口服务器:提供API接口的服务器
基本使用
创建基本服务器
//1.导入express
const express=require('express')
//2.创建web服务器
const app=express()
//3.启动web服务器
app.listen(80,()=>{
console.log('express server running at http://127.0.0.1')
})
监听GET请求:通过app.get()方法
监听POST请求:通过app.post()方法
具体语法:
参数1:客户端请求的url地址
参数2:请求对应的处理函数
req:请求对象
res:响应对象
app.get('请求对象url',function(req,res){/*处理函数*/})
app.post('请求对象url',function(req,res){/*处理函数*/})
req.query()可以获取到客户端发送过来的查询参数,默认是一个空对象
req.params()可以访问到url中,通过:匹配到的动态参数:
express.static()方便建立静态资源服务器,通过以下代码可以将public目录下的图片,js,css文件对外开放:
app.use(express.static('public'))
nodemon:
监听项目文件的变动,当代码被修改后,会自动帮我们重启项目。
安装命令:npm i -g nodemon
使用:将node命令替换为nodemon,可以更加方便。
Express路由
路由的概念:
路由:映射关系。客户端的请求与服务器处理函数之间的关系
3部分组成:请求类型,请求的url地址,处理函数
Express中的路由的例子:
匹配get请求,且请求url为/
路由匹配的注意点:
按照定义的先后顺序进行
请求类型和请求的url同时匹配才会调用对应的处理函数
路由的使用:
最简单的用法:(把路由挂载在app上)
模块化路由:
将路由抽离为单独模块的步骤:
1.常见路由模块对应的js文件
2.调用express.Router()函数创建对象
3.向路由对象上挂载具体的路由
4.使用module.exports向外共享路由对象
5.使用app.use()函数注册路由模块
注册路由模块:
app.use()函数的作用,就是来注册全局中间件的。
Express中间件
概念:特指业务流程的中间处理环节。
调用流程:对请求进行预处理环节
中间件的格式:本质是一个function处理函数。形参中包含next函数。
next函数:中间件连续调用的关键,它表示吧流转关系交给下一个中间件或路由。
局部生效的中间件:
定义多个局部中间件:
app.get('/',nw1,nw2,(req,res) =>{res.send('Home page')})
中间件的注意事项:
1.一定在路由之前注册中间件。
2.客户端法过来的请求可以连续调用多个中间件记性处理
3.执行完中间件的业务代码之后,不要忘记调用next()函数
4.为了防止代码逻辑的混乱,调用了next()函数后,不要再写额外的代码
5.连续调用多个中间件时,多个中间件之间,共享req和res对象
中间件的分类:
1.应用级别的中间件:
通过app.use()或app.get()或app.post(),绑定在app实例上的中间件,叫做应用级别的中间件。
2.路由级别中间价:
绑定express.Router()实例上的中间件。绑定到rrouter实例上。
3.错误级别的中间件:
专门用来捕获整个项目中发生的异常错误,从而防止项目崩溃的问题。
格式:
中间件的作用:统一为req和res对象添加自定义的属性或方法,供下游中间件或路由进行使用。
自定义中间件:1.定义中间件;2.监听req的data事件;3.监听req的end事件;4.使用qquerystring模块解析请求数据;5.将解析出的数据对象挂载为req.boddy;6.将自定义中间件封装为模块。
使用Express写接口
创建基本的服务器:
创建API路由模块:
创建GET接口:
编写POST接口:
CORS跨域资源共享:
解决跨域问题:
cors解决方案:一定要在路由之前,配置cors这个中间件,从而解决接口跨域问题
cors响应头部-Access-Contorl-Allow-Origin
-Access-Contorl-Allow-Headers
-Access-Contorl-Allow-Methods
JSONP接口:
注意:项目中已经配置了cors跨域共享,为防止冲突,在配置cors中间件之前声明JSONP的接口。