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. ORACLE 动态执行SQL语句

    本文转自 http://zhaisx.iteye.com/blog/856472 Oracle 动态SQL Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immedia ...

  2. 2016级算法期末模拟练习赛-F.AlvinZH的青春记忆IV

    1086 AlvinZH的青春记忆IV 思路 难题,动态规划. 这是一道很有意思的题,因为它不仅卡了时间,也卡了空间,而且卡的很妙很迷. 光是理解题意已经有点难度,简化题意:两串数字序列,相等的数字定 ...

  3. Spring Boot 笔记汇总

    使用IDEA搭建Spring Boot入门项目 从零开始完整搭建 Spring-Boot 项目开发框架的教程 IDEA通过Maven WebApp archetype 创建Spring boot项目骨 ...

  4. python 全栈开发:数据类型整体分析

    数据类型初始 数据类型:    int :用于计算. 例子:1.2.3.4........................... 常用方法操作: bit_length()   ps:求一个数字转换成二 ...

  5. RocketMQ之NameServer学习笔记

    org.apache.rocketmq.namesrv.NamesrvController NameserController,NameServer的核心控制类. 1.1 NamesrvConfig ...

  6. 认识HTML5中的新标签与新属性

    前端之HTML5,CSS3(一) HTML5中常用内容标签 header标签 header标签定义文档的页眉,基本语法:<header>content</header>. na ...

  7. 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决

    ksoap2-android-3.0.0-jar 第三方库来调用.net 写的Web Service 如果没有参数,那么调用一切顺利,但是如果服务是带参数的,那么服务端接收的参数都是nul.      ...

  8. Angularjs跨域

    一.首先我们要明白跨域的字面概念,读过留过印象之后,下面将会有例子进一步解释 有一篇文章<跨域的理解与实现>描述得很清楚,在这里摘录如下: 域(Domain)是Windows网络中独立运行 ...

  9. c#和java中封装字段的不同

    c#: private String name; public String Name { get { return name; } set { name = value; } } .csharpco ...

  10. [转]MVC Razor模板引擎 @RenderBody、@RenderPage、@RenderSection及Html.RenderPartial、Html.RenderAction

    本文参考自下面文章整理 MVC Razor模板引擎 @RenderBody.@RenderPage.@RenderSection及Html.RenderPartial.Html.RenderActio ...