关键词不能为空

位置:白城汽车新闻网 > 汽车资讯 > express中间件-express

express中间件-express

作者:白城汽车新闻网
日期:2020-02-11 12:57:49
阅读:

Express应用程序本质上是一系列中间件函数调用。

中间件可以做下面这些事情

  • 执行任何代码
  • 修改request和response对象
  • 结束请求(响应周期)
  • 调用堆栈中的下一个中间件函数
  • 如果当前中间件没有结束请求,那么需要调用next(),将控制权传递给下一个中间件函数,否则请求会被挂起,后边定义的中间件将不会执行
app.use(function (req, res, next) {
console.log('first')
// next()
})
app.post('/info', (req, res) => {
console.log('****POST*****')
console.log(req.body)
res.status(200).send(req.body)
})

使用postman模拟请求http://localhost:3002/info,请求会在第一个中间件挂起,不会执行到第二个

有next

express中间件

没有next

express中间件

express将中间件等信息存放在stack中,如果没有匹配到合适的中间件或者没有结束请求,那么就会循环往下匹配,直到最后一个。

express可以使用下面这些类型的中间件:

  • Application-level
  • Router-level
  • Built-in 内置中间件
  • Error-handling错误处理中间件
  • Third-party第三方中间件

Application-level 中间件

使用app.use()和app.METHOD()将中间件绑定到app对象。METHOD为get,put、post等

执行匹配任何路径(这里省略/)
app.use(function(req,res,next)=>{
//do something
})
执行匹配/user路径的任何http请求
app.use('/user',(req,res,next)=>{
//do something
})
执行匹配/user/:id路径的get请求
app.get('/user/:id',(req,res,next)=>{
//do something
})

Router-level 中间件

和Application-level工作方式类似,但是它是绑定在express.Router()上的

Error-handling 中间件

定义方法差不多,只是它接收四个参数,使用相关方法如下

var express = require('express')
var bodyParser = require('body-parser')
var app = express()
var port = '3002'
app.use(bodyParser.json())
app.use(function (req, res, next) {
console.log('first')
next()
})
app.post('/info', (req, res) => {
console.log('****POST*****')
console.log(req.body)
throw new Error('测试')
// res.status(200).send(req.body)
})
app.use(function (err, req, res, next) {
console.error(err)
res.status(500).send(err.message)
})
app.listen(port, () => {
console.log(`localhost:${port}`)
})

内置中间件

包含在express中的中间件功能

内置的中间件有:

  • express.static提供静态资源
// 将静态文件目录设置为项目根目录+/public
app.use(express.static(__dirname + '/public'));
  • express.json使用JSON解析传入的请求(express 4.16.0+有效)
  • 类似body-parse中的bodyParse.json()
app.use(express.json())
  • express.urlencoded使用URL-encoded解析传入的请求(express 4.16.0+有效)
  • 类似body-parse中bodyParser.urlencoded()
app.use(express.urlencoded({extended:false}))

第三方中间件

需要安装模块获取需要的功能,然后在application level或者router level中加载到应用程序中,例如下面的增加body-parser

var express = require('express')
var bodyParser = require('body-parser')
var app = express()
app.use(bodyParser.json())

中间件next源码解析链接 https://www.cnblogs.com/aishangliming/p/6115359.html

白城汽车新闻网一直为网友的需求而努力相关推荐

  • express中间件-express

    express,请求会在第一个中间件挂起,不会执行到第二个有next没有nextexpress将中间件等信息存放在stack中,如果没有匹配到合适的中间件或者没有结束请求,那么就会循环往下匹配,直到最后一个。

    汽车资讯
  • NodeJS的Express框架基础学习笔录(一)-express

    express,1、express()函数:创建Express应用程序。 express()函数是由express模块导出的顶级函数。var express = require('express'); √2、Application(app):app对象通常表示Express应用程序。

    汽车资讯
  • ES系列-3. ElasticSearch的Mapping-es系列

    es系列,关系型数据库创建一张表时,会定义多个字段来描述这张表的用途,我们称之为schema。比如,我们要将某个博客的内容存储到关系型数据库时,我们会创建一张blog。

    汽车资讯