关于Express的中间件

var express = require(‘express‘)

var app = express()

app.use(‘/‘,function(req,res,next){

console.log(1)

})

app.get(‘/‘,function(req,res,next){

console.log(2)

})

app.listen(3000)

express 中间件的执行,和它所处的位置很有关系。

代码运行之后,会将前台发送来的url与中间件中的path进行匹配,当url匹配到一个中间件的path匹配成功后,就执行当前的中间件,后面的中间件将不再执行。

所以,对于以上代码,若前端请求的url是‘/‘,则后台只会输出 1,后面的中间件不会再执行下去。

若想继续执行下面的中间件,可以使用 next() 函数转交控制权

var app = express()

app.use(‘/‘,function(req,res,next){

console.log(1)

next()

})

app.get(‘/‘,function(req,res,next){

console.log(2)

})

app.listen(3000)

将代码改成上面的形式,在第一个中间件中使用next()函数,那么控制权就转交给了下一个中间件。所以后台会输出 1 和 2;

注意:

  若在中间件中已经向客户端响应过请求后,就不允许在使用next() 函数转交控制权。例如

  var app = express()

app.use(‘/‘,function(req,res,next){

console.log(1)

res.send(‘a‘)

next()

})

app.get(‘/‘,function(req,res,next){

console.log(2)

})

app.listen(3000)

以上代码会报错:Can‘t set headers after they are sent。

其实很好理解,当前的中间件都已经响应过请求了,响应已经结束了,又如何再去转交控制权呢?

总结:

  对于中间件的执行,按照前端的url与中间件的path匹配,若匹配成功,执行当前中间件,后面的中间件不再执行。

  若想让后面的中间件继续执行,则在当前执行的中间件中使用next()函数,将控制权转交给下面的中间件,前端url继续和下面的中间件的path进行匹配。

  注意,若想在一次请求中,执行多个中间件,应该让最后一个中间件去响应客户端请求,也就是说,转交控制权的中间件不允许再同时响应请求,否则会报错。

时间: 2024-10-11 06:07:04

关于Express的中间件的相关文章

node中express的中间件之methodOverride

methodOverride中间件必须结合bodyParser中间件一起使用,为bodyParser中间件提供伪HTTP方法支持. index.html代码: 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>向服务器上传文件</title> 6 <script type=&quo

node中express的中间件之cookieParser

cookieParser中间件用于获取web浏览器发送的cookie中的内容.在使用了cookieParser中间件后, 代表客户端请求的htto.IncomingMessage对象就具有了一个cookies属性,该属性之为一个对象的数组, 其中存放了所有web浏览器发送的cookie,每一个cookie为cookies属性值数组中的一个对象. index.html代码: 1 <!DOCTYPE html> 2 <html> 3 <head lang="en&quo

node中express的中间件之basicAuth

basicAuth中间件为网站添加身份认证功能.在使用了该中间件后, 用户访问网站时必须输入用户名与密码,在用户输入了用户名与密码并通过验证之后才能访问网站. 当用户输入的用户名和密码符合条件,中间件会返回true,允许用户访问网站.否则会返回false.不允许访问网站. 1 var express=require("express"); 2 var app=express(); 3 app.use(express.basicAuth("gys","123

[转] Nodejs 进阶:Express 常用中间件 body-parser 实现解析

写在前面 body-parser是非常常用的一个express中间件,作用是对post请求的请求体进行解析.使用非常简单,以下两行代码已经覆盖了大部分的使用场景. app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); 本文从简单的例子出发,探究body-parser的内部实现.至于body-parser如何使用,感兴趣的同学可以参考官方文档. 入门基础 在正式讲解前,我们先来看一个POST

【nodejs】--express的中间件multer实现图片文件上传--【XUEBIG】

Multer是nodejs中处理multipart/form-data数据格式(主要用在上传功能中)的中间件.该中间件不处理multipart/form-data数据格式以外的任何形式的数据 Tips:multipart/form-data是用来指定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或者mp3等等 1.安装第三方插件 cnpm install multer --save 2.配置文件 //引入依赖模块 var express = require('express');

[转]express常用中间件

整理一下工作中经常使用到的Express中间件 config-lite: 读取配置文件 不同环境下配置文件使用 - Node实战 config-lite express-session: session 中间件 nodejs 实践:express 最佳实践(四) express-session 解析 express-session Express + Session 实现登录验证 connect-mongo: 将 session 持久化存储于 mongodb,结合 express-session

基于node.js及express实现中间件,实现post、get

首先,当然是有必要的环境,安装node,这个我就不多说了. 依赖模块: "express": "^4.13.4", "request": "^2.72.0", "body-parser": "^1.13.3", 页面 $.ajax({ type: "post", url: "/api", contentType: "application

express的中间件body-parse

1. 安装 npm install body-parser 2. var bodyParser = require('body-parser'); //只要加入这个配置,在req请求对象上会多出来一个属性 //parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) //parse application/json app.use(bodyParser.json()) a

node的express中间件之bodyParser

bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理. 下面是一个文件上传的例子. 建立一个1.html页面 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>向服务器上传文件</title> 6 <script