0%

中间件

使用express创建服务器,发起Get,Post请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const express=require('express')
//创建web服务器实例
const app=express()
//监听客户端的get请求post请求,并向客户端响应请求
app.get('/user',(req,res)=>{
res.send({name:'zs',age:20,gender:'男'})
})
app.post('/user',(req,res)=>{
res.send('请求成功')
})
//获取请求参数
app.get("/",(req,res)=>{
//req.query可以获取到客户端发送过来的查询参数向客户端响应一个查询参数
console.log(req.query)
res.send(req.query)
})
//获取到URL中的动态参数
app.get("/user/:id/:username",(req,res)=>{
console.log(req.params)
res.send(req.params)
})

//启动服务器
app.listen(80,()=>{
console.log('express server running at http://127.0.0.1')
})

托管静态资源

express.static():创建一个静态资源服务器,通过如下代码可以将public目录下的图片,CSS文件,JavaScript文件对外开放访问

1
2
3
4
5
6
7
8
9
10
11
12
const express=require('express')
//创建web服务器实例
const app=express()
//托管多个静态资源目录,express.static会根据目录的添加顺序查找所需文件,http://127.0.0.1,public不出现在路径中
app.use(express.static('public'))
app.use(express.static('files'))
//希望挂载前缀
ap.use('/public',express.static('public',))//打开的是http://127.0.0.1/public,如果希望public出现在路径中则将访问前缀写public
//启动服务器
app.listen(80,()=>{
console.log('express server running at http://127.0.0.1')
})

中间件

中间件的作用:

多个中间件之间共享一份req和res,基于这种特性可以在上游的中间件中,统一为req或res对象添加自定义顶点属性或方法,供下游的中间件或路由进行使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const express=require("express")
const app=express()
//中间件的作用:共享req,res
app.use((req,res,next)=>{
const time=Date.now()
req.startTime=time
next()
})
app.get('/',(req,res)=>{
res.send('Home page'+req.startTime)
})
app.get('/user',(req,res)=>{
res.send('User page'+req.startTime)
})
app.listen(80,()=>{
console.log('http://127.0.0.1')
})

中间件分类:

[]: http://expressjs.com/en/guide/using-middleware.html

错误级别的中间件要注册在所有路由之后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const express = require("express");
const app=express()
app.get('/',(req,res)=>{
throw new Error('服务器发生错误')
res.send('Home page')
})
//错误级别中间件必须注册在所有路由之后
app.use((err,req,res,next)=>{
console.error(err.message)
res.send('Something broke:'+err.message)
})
app.listen(80,()=>{
console.log('http://127.0.0.1')
})

使用中间件的注意事项

  • 要在路由之前注册中间件
  • 客户端发送过来的请求,可以连续调用多个中间件进行处理
  • 执行完中间件的业务代码,要记得调用next()函数
  • 连续调用的多个中间件时,多个中间件间共享req和res对象