对于Node中Express框架的中间件概念的感知
中间件是什么呢?
中间件就是客户端http请求发起传送到服务器和服务器返回响应之间的一些处理函数。
为什么要使用中间件?
var express = require('express')
var app = express()
app.use(function(req,res) {
    res.end('404 NOT FOUND')
}
app.listen(3000,function(){
    console.log('running...');
}
所有对该服务器的请求最终都会返回404 NOT FOUND,无论是路径是什么
var express  = require('express')
var app = express()
app.use('/public',function(req,res,next) {
    res.end('you are public');
}
app.listen(3000,function(){
    console.log('running...')
}
只要客户端访问该服务器的地址是以public开头(即127.0.0.1:3000/public/xxx),那么就会返回you are public 字符串
var express = require('express')
var app = express()
// 中间件1
app.get('/get/puclic',function(req,res){
    res.end('get!');
}
// 中间件2
app.post('/post/public',function(req,res) {
    res.end('post!');
}
app.listen(3000,function(){
    console.log('running...');
}
客户端只有通过get方式访问127.0.0.1:3000/get/public时才会进入中间件1,只有通过post方式访问127.0.0.1:3000/post/public时才会进入中间件2,只有这两者完全匹配才会进入对应的中间件

以下面的代码为例进一步说明中间件的执行顺序
var express = require('express');
var app = express()
//中间件1
app.use(function(req,res) {
	console.log('非严格');
})
//中间件2
app.use('/public',function(req,res,next) {
	console.log('半严格');
    next();
})
//中间件3
app.get('/public',function(req,res) {
	console.log('严格 get');
})
//中间件4
app.post('/public',function(req,res) {
	console.log('严格 post');
})
//中间件5
app.get('/public',function(req,res) {
	console.log('严格 get');
})
app.listen(3000,function() { console.log('running...') })
此时客户端访问/public,那么首先会进入中间件1,因为有执行next函数,所以直接寻找后面能够匹配的中间件,进入中间件2,中间有执行next函数,所以进入中间件3,但是中间件3没有next函数,所以不再执行,所以输出的语句是‘非严格’ '半严格' '严格 get'
如果是下面代码,请求/public后结果又是怎样呢?
var express = require('express');
var app = express()
app.use('/img',function(req,res) {
	console.log('半严格');
})
app.get('/public',function(req,res) {
	console.log('严格 get');
})
app.post('/public',function(req,res) {
	console.log('严格 post');
})
app.listen(3000,function() { console.log('running...') })
结果是输出'严格 get',请求到达服务器后,从上往下逐渐匹配,匹配到第二个中间件,进入执行,但是该中间件没有执行next函数,所以终止
综上所述,我们可以知道,第三方中间件的安装执行是有讲究的
对于Node中Express框架的中间件概念的感知的更多相关文章
- Node.js Express 框架
		
Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP ...
 - Node.js Express框架
		
Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...
 - node.js中express框架的基本使用
		
express是一个基于node.js平台的,快速,开放,极简的web开发框架. 一.安装 express npm install express --save 二.简单使用 express //引入 ...
 - Node.js Express 框架学习
		
转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...
 - node之Express框架
		
Express是node的框架,通过Express我们快速搭建一个完整的网站,而不再只是前端了!所以Express还是非常值得学习的! express有各种中间件,我们可以在官方网站查询其用法. Ex ...
 - Node.js Express 框架 Express
		
Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速 ...
 - 44.Node.js Express 框架--web框架
		
转自:http://www.runoob.com/nodejs/nodejs-express-framework.html Express 简介 Express 是一个简洁而灵活的 node.js W ...
 - Node.js+Express框架+Mongo学习(一)第一个node.js实例
		
1.在桌面新建一个空的文件夹,比如叫node,当然也可以在其它地方新建. 2.命令行进入到所新建的文件夹的目录,下载Express框架,再在这个文件夹里新建一个叫final的项目 3.在项目(fina ...
 - node中express的中间件之cookieParser
		
cookieParser中间件用于获取web浏览器发送的cookie中的内容.在使用了cookieParser中间件后, 代表客户端请求的htto.IncomingMessage对象就具有了一个coo ...
 
随机推荐
- nginx.conf 配置解析之 server配置
			
server{} 包含在http{}内部,每一个server{}都是一个虚拟主机(站点) 以下为nginx.conf配置文件中server{ }部分的内容. server { listen ; // ...
 - 第08组 Alpha事后诸葛亮
			
组长博客 点这里! 总结思考 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 弥补Powerpoint中模板转换存在的缺陷,完善PPT模板一键转换的功能 ...
 - adb 常用命令一
			
1.install 和uninstall adb -s 设备号 install 安装包路径 adb uninstall package名 2.pull 和push: adb pull /sdcar ...
 - /etc/resolv.conf文件中的search项作用
			
resolv.conf文件中有search项时,主机名解析规则顺序: DNS配置文件如下: # vi /etc/resolv.conf # Generated by NetworkManager se ...
 - DELPHI开始支持LINUX DOCKER
			
DELPHI开始支持LINUX DOCKER 本方翻译自Marco Cantu的文章. 在过去的几年中,将服务器端解决方案(实际上是任何类型的应用程序)部署到轻量级容器而不是物理机器或虚拟机已经变得越 ...
 - JavaScript的filter方法
			
var ages = [32, 33, 16, 40]; function checkAdult(age) { return age >= 18; } function myFunction() ...
 - mod_spatialite.so.7
 - git 执行 git reset HEAD 报 Unstaged changes after reset
			
Unstaged changes after reset 解决的办法如下2中办法: 1. git add . git reset --hard 2. git stash git stash dro ...
 - (原创)C++ 同步队列
			
(原创)C++ 同步队列 同步队列作为一个线程安全的数据共享区,经常用于线程之间数据读取,比如半同步半异步线程池的同步队列. 其实做起来比较简单,要用到list.锁和条件变量,条件变量的作用是在队列满 ...
 - start & stop  kafka cluster shell script
			
kafka_start_cluster.sh #!/bin/bash brokers="kafka-server-1 kafka-server-2 kafka-server-3" ...