对于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 ...
随机推荐
- Linux常用命令简述--dirname与basename
dirname 获取父目录 basename 显示最后的目录名或文件名 .dirname [root@liang ~]# dirname /etc/httpd/ /etc [root@liang ~] ...
- 【技术博客】 利用Postman和Jmeter进行接口性能测试
利用Postman和Jmeter进行接口性能测试 作者:ZBW 版本:v1.1 在Phylab的开发过程中,对于生成报告接口的性能考量十分重要.原有的Latex接口虽然生成的报告美观,但编译Latex ...
- 【面向对象】第四单元总结——UML
本单元构架设计 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的 ...
- HTTP协议之multipart/form-data
HTTP协议之multipart/form-data REST API可以用multipart/form-data,来上传文件. 在最初的 http 协议中,没有上传文件方面的功能. rfc1867为 ...
- malloc分配到一块内存,读写操作时却发生segmentation falt的奇怪问题。
期初现象:malloc一块内存,读写操作时发生segmentation falt.一般来讲malloc倘若失败应该抛出异常,所以malloc返回一个指针后,这个指针应该都是可用的,况且是进行读操作. ...
- SpringBoot 为API添加统一的异常处理(一)
首先我把异常分为两种,一种是可控制的,或者是由我们发现条件不正确主动抛出的异常,就像前城市编号不存在那个粟子:另一种是不可控制的,或者说是程序存在bug引起的异常,但这种异常也不想变态的就直接给前端抛 ...
- mysql 日期计算集合
#日期计算集合 #select curdate() #本前日期 #,DATE_ADD(`date`,interval day) /*本月前一天(昨天)*/ #,DATE_ADD(`date`,inte ...
- SDN实验---Ryu的应用开发(三)流量监控
一:实现流量监控 (一)流量监控原理 其中控制器向交换机周期下发获取统计消息,请求交换机消息------是主动下发过程 流速公式:是(t1时刻的流量-t0时刻的流量)/(t1-t0) 剩余带宽公式:链 ...
- aps.net StateServer设置
1.在 system.web节点 加 <sessionState mode="StateServer" stateConnectionString="tcpip=1 ...
- word 条件多项式公式对齐
条件多项式公式对齐 觉得有用的话,欢迎一起讨论相互学习~Follow Me 对于使用word编写具有多个多项式的公式时,经常会有所偏移 最不优雅的方式就是使用逗号进行分隔和排版使其公式上下对齐 第二种 ...