express
express概念:express是基于nodejs的HTTPS模块构建出来的一个web应用开发框架,在nodejs之上扩展了 Web 应用所需的基本功能。
本质上express应用就是调用各种中间件。

中间件:一个处理某个功能或模块的函数,一个中间件对应一个要处理的小任务。
功能:
1、修改请求和响应对象
2、终结请求-响应循环
3、调用堆栈中的下一个中间件。

示例:
var express=require("express") //引入express框架
var app = express() //创建app应用

//app.use() 调用中间件
//如果中间件没有挂载点,无论什么请求都会执行该代码
app.use(function(req,res,next){
  console.log(req.cookie);
  next();
})

// '/admin/:id'是挂载点,当要请求这个路径,就会执行下面的代码 一个中间件栈必须要调用终止请求-响应循环方法
app.use('/admin/:id',function(req,res,next){
  console.log(req.user.id);
  next();
},function(req,res,next){
  res.end(req.params.id); // 执行结束方法终止请求-响应循环,(end(),send()..都可以终止)
})

// 同一个挂载点,这个永远不会被调用
app.use('/admin/:id',function(req,res,next){
  res.send('User Info');
})

中间件五大类:
1、应用级中间件
2、路由级中间件
3、错误处理中间件
4、内置中间件
5、第三方中间件

应用级中间件:绑定到app对象上的中间件(app.use()或app.method()),以上示例都是应用级中间件
路由级中间件:绑定到express.Router()对象上的中间件
以上示例改一下就变成路由级

var express=require("express")
var app = express()
var router = express.Router()
router.use(function (req, res, next) {
  console.log('Time:', Date.now());
  next();
});
// 将路由挂载至应用
app.use('/', router);

路由级中间件和应用级中间件的区别是:
当var app=express()的时候就已经创建了一个application,在application内部就创建了一个Router,大部分对application的操作实际上被重定向到Router了。
例子:
app.use() 相当于 app._router.use()
所以application是Router的封装,Router才是核心

错误处理中间件:有4个参数(err,req,res,next)
app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

内置中间件:express.static 是 Express 唯一内置的中间件。
将静态资源文件所在的目录作为参数传递给 express.static 中间件就可以提供静态资源文件的访问
app.use('/public',express.static('public'));

第三方中间件:
安装并加载一个解析 cookie 的中间件: cookie-parser
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');

// 加载用于解析 cookie 的中间件
app.use(cookieParser());

总结:中间件是一个处理函数

欢迎指正!

express中间件笔记整理的更多相关文章

  1. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  2. NPM 学习笔记整理

    NPM 学习笔记整理 阅读 550,2017年06月04日 发布,来源:blog.ihoey.com 什么是 NPM npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ru ...

  3. Node.js连接Mysql,并把连接集成进Express中间件中

    引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以 ...

  4. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  5. 从0开始学Swift笔记整理(五)

    这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...

  6. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  7. 学习ReactNative笔记整理一___JavaScript基础

    学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...

  8. Deep Learning(深度学习)学习笔记整理系列之(八)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  9. Deep Learning(深度学习)学习笔记整理系列之(七)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

随机推荐

  1. Mac安装的PyCharm找不到顶部菜单栏 PyCharm找不到setting PyCharm不能个性化设置和直接导库

    安装的是最新版的PyCharm,打开发现没有顶部菜单栏,不能直接导库..有点方 以前的就是下面这种 找了很久发现原来在右下角!!!眼拙 点击画圈圈的地方就可以直接进去导库这些啦〜

  2. C# 文件读写系列三

    1.读写文本文件 在C# 文件读写系列二中列举了相当多的读写文本文件的方法,大致有以下几种: (1).通过静态类File的静态方法来进行文本文件的读写,主要有ReadAllBytes().ReadAl ...

  3. java常量类的实现方式_枚举类_项目实践

    前言 众所周知,系统里有很多比如订单状态.审核状态:性别.结算方式.交易类型等属性,这些属性只有几个值,一般用0.1.2.3等的数字标识存入数据库,每次对这些属性所属对象的增删改操作,都会在代码里给状 ...

  4. struts2上传单个文件

    项目目录: struts.xml配置: <constant name="struts.enable.DynamicMethodInvocation" value=" ...

  5. html转图片,java库cssbox

    引入依赖包 <dependency> <groupId>net.sf.cssbox</groupId> <artifactId>cssbox</a ...

  6. JavaScript数据结构-1.数组

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Struts2 resulttype

    本文章只介绍较为常用的三种result type 1.dispatcher 2.redirect 3.redirectAction 一.dispatcher 用于转向JSP页面,这个是默认的结果类型, ...

  8. 在Linux上创建webrev(cont)[基于svn]

    在前文中,基于git介绍了webrev工具.实际上,webrev工具还支持hg和svn.最近的工作中不可避免地要使用svn,故在此总结一下如何基于svn在Linux上创建webrev.顺便吐个槽,没有 ...

  9. 实例说明optimize table在优化mysql时很重要

    今天在看CU的时候,发现有人问有关optimize来表优化的问题,当年因为这个问题,困扰我很长一段时间,今天有空我把这个问题,用实际数据来展示出来,让大家可以亲眼来看看,optimize table的 ...

  10. 安卓加固之so文件加固

    一.前言 最近在学习安卓加固方面的知识,看到了jiangwei212的博客,其中有对so文件加固的两篇文章通过节加密函数和通过hash段找到函数地址直接加密函数,感觉写的特别好,然后自己动手实践探索s ...