express中间件

什么是中间件?

中间件,即Middleware,是系统软件和用户应用软件之间连接的软件,以便于软件各部分之间的沟通。就好比,前端发送请求到服务端,服务端可能存在很多复杂的逻辑,所以就需要中间件,服务端收到请求通过中间件来判断是否有权限去访问下一步,可以就继续访问,不行就返回。当然这只是中间件其中一种功能,另外还有非常多的功能需要探索,接下来就主要讲一下比较常用的中间件。

全局中间件
app.use(function (req, res, next) {
 console.log('Time:', Date.now())
 req.reqestTime = Date.now()
 next()
})

当我们启动服务,我们会看到服务打印的内容,会先进过全局中间件

全局中间件

除了req,res这两个参数使我们熟知的以外,这个next也必须说一下,关于next,当我们去执行它的时候,我们就会执行下一步,但是如果当我们不写next(),页面会一直卡在中间件这里,无限转圈。

ps:上一篇中提到了,app.all(),其实也可以把这个看过中间件,当我们服务经过全局中间件那里的时候,next会去寻找符合条件的服务,此时app.all是包含所有的类型的请求,所以我们也接下来也会经过它,然后再去执行,下一个符合条件的操作。

app.all('*',function(req,res,next){
     console.log('所有请求')
     next()
})
开放跨域请求
app.ues(function(req,res,next){
     //设置允许跨域,*代表允许任意域名跨域
     res.header("Access-Control-Allow-Origin","*")
     //允许的header类型
     res.header("Access-Control-Allow-Headers","content-type")
     //允许跨域的请求方式
     res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS")
    if(req.method === "OPTIONS")res.sendStatus(200) //让options尝试请求快速结束
    else next()
})
express自带中间件

1、json格式数据中间件,它使用JSON有效载荷解析传入请求,并且基于身体解析。返回只解析JSON的中间件,并且只查看Content-Type报头与type选项匹配的请求。express.json
将接口参数传递有两种形式,要么就是body,要么就是url拼参数传递。

app.post("/test", (req, res) => {
  console.log(req.query)
  console.log(req.body)
  res.send("ok")
})

① 假如我们的传递形式是这样的:http://localhost:8080/test?name='zhangsan'&age=18


query我们可以拿到,但由于我们不是靠body传值,所以此时是undefined
② 假如我们传递形式是json:
json

此时我们打印的结果还是和①一样,说明我们无法转义json,所以就需要加上

app.use(express.json())
完整的body请求

2、静态文件中间件。express.static()
首先创建一个public的文件夹来存放我们的静态文件。其次选取一张照片存入public文件夹。
接着我们写上

const path = require("path")
app.use(express.static(path.join(__dirname, "public")))

启动服务输入http://localhost:8080/1.jpg就可以看到图片,当然如果public文件夹里面又创建了一个文件夹,同样的,在1.jpg前面加上那个文件夹名,例如http://localhost:8080/abc/1.jpg 其中abc就是文件夹名。

3、路由中间件。express.Router()
所有路由请求如果都写在app.js会显得冗余,我们需要把不用逻辑的路由抽取到不用的js文件中去,增加可读性和减少耦合性。
创建文件./routerTestRouter.js文件

const express = require("express")
var router = express.Router()
//get请求接口
router.get("/test",function(req,res){
   res.send(req.body)
})
module.exports = router

app.js加入下面代码

//把TestRouter路由添加到app中
app.use("/test",require("./router/TestRouter"))
//路由中的/test接口,访问路径 -> /test/test
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容