中间件的功能和分类

中间件的本质就是一个函数,在收到请求和返回相应的过程中做一些我们想做的事情。Express文档中对它的作用是这么描述的:

执行任何代码。
修改请求和响应对象。
终结请求-响应循环。
调用堆栈中的下一个中间件。

分类

Express文档中把他们分为了五类,但是他们的原理相同,只是用法不同:

应用级中间件
路由级中间件
错误处理中间件
内置中间件
第三方中间件

下面介绍常用中间件

express.static()

这是一个用来返回静态文件的自带中间件,不需要下载
就是一方法,直接往use()里面加
express.static(root, [options]) 第一个参数是静态文件存储的目录

let server = express();//创建server,直接调用函数就行
server.use(express.static('./static/'));
server.listen('8080');

处理之后,前端就可以在root目录中访问静态文件了

body-parser:

用于解析post数据,这玩意er执行后会往req里面塞一个body,body里面就有处理好的数据

//所有的post请求都经过这个中间件
server.post('*',parser.urlencoded({
extended: false //给个属性,一般不开
}))
server.post('/reg',(req,res) => {
console.log(req.body);//在这就可以使用解析好的body数据
})

multer:处理文件上传

添加之后,会往req加一个files属性

const multer = require('multer')
let obj = multer({
dest: '上传的文件所放的路径'
})
server.post(obj.any());//添加之后,会往req加一个files属性

cookie-parser

用来操作cookie

const cookieParser = require('cookie-parser');//一个方法
server.use(cookieParser());//使用之后可使用req.cookie()方法,req.signedCookies
server.get('/a',(req,res) => {
console.log(req.cookies);
res.cookie('a',998);//用于设置cookie
res.send('over');
})

cookie方法的使用:

res.cookie(键,值)

res.cookie(键,值,{options})

options: 可选择添加的配置

  • domain:域名
  • path:路径,一般给个/
  • maxAge:最大时长
  • httpOnly:true 只有服务器能看到
  • secure: true //只有https能用
  • signed:true //是否签名

cookie-session:

express中用于处理session的中间件

const cookieSession = require('cookie-session');
server.use(cookieSession({
keys:['1sfdsa44','asdfdaf'...]//循环密钥
maxAge:多久过期
}))

使用之后可以使用req.session['键']获取或设置session

关于cookie和session的理解:

用户的cookie -> 服务器的密钥签名 -> session_id -> 通过cookie+session_id访问服务器 -> 使用密钥校验cookie和session_id是否匹配

session就像一张身份证,防止有人伪造cookie访问服务器

nodeJs,Express中间件是什么与常见中间件的更多相关文章

  1. 下篇:express、koa1、koa2的中间件原理

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载联系作者并保留声明头部与原文链接https://luzeshu.com/blog/express-koa 本博客同步在http://www.c ...

  2. nodejs+express使用html和jade

    nodejs+express经常会看到使用jade视图引擎,但是有些人想要访问普通的html页面,这也是可以的: var express = require('express'); var port ...

  3. 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

    小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...

  4. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址: ...

  5. [NodeJs] 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

    小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...

  6. nodejs+express工程 在npm install之后或使用npm install bootstrap命令安装bootstrap之后

    nodejs+express工程 在npm install之后或使用npm install bootstrap命令安装bootstrap之后引入bootstrap文件 如果你的静态资源存放在多个目录下 ...

  7. vue+nodejs+express+mysql 建立一个在线网盘程序

    vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1 ...

  8. nodejs+express开发blog(1)

    前言 Nodejs是一个年轻的编程框架,充满了活力和无限激情,一直都在保持着快速更新.基于Nodejs的官方Web开发库Express也在同步发展着,每年升级一个大版本,甚至对框架底层都做了大手术.在 ...

  9. NodeJS+Express+mySQL服务端开发详解

    随着NodeJS的发展,现在已经被很多人熟知,NodeJS已经成为了前端开发人员必备的技能.本文不会对NodeJS过多介绍 如果你感兴趣可以访问NodeJS 官网, 维基百科 本文是利用NodeJS+ ...

随机推荐

  1. AtCoder Beginner Contest 213 F题 题解

    F - Common Prefixes 该题也是囤了好久的题目了,看题目公共前缀,再扫一眼题目,嗯求每个后缀与其他后缀的公共前缀的和,那不就是后缀数组吗?对于这类问题后缀数组可是相当在行的. 我们用后 ...

  2. 挂载iscsi存储

    参考连接:https://segmentfault.com/a/1190000005853387?utm_source=tag-newest 安装客户端工具,iscsi-initiator yum i ...

  3. 设计模式二--模板方法Template method

    模式分类: 书籍推荐:重构-改善既有代码的设计 重构获得模式 设计模式:现代软件设计的特征是"需求的频繁变化".设计模式的要点是 "寻找变化点,然后在变化点处应用设计模式 ...

  4. sklearn之转换器和估计器

    sklearn之转换器和估计器 转换器 估计器(sklearn机器学习算法的实现) 转换器 想一下之前做的特征工程的步骤? 实例化(实例化的是一个转换器类(Transformer)--特征工程的父类) ...

  5. Part 39 AngularJS route change events

    In this video we will discuss1. Different events that are triggered when a route change occurs in an ...

  6. 问题 A: 喷水装置(一)

    题目描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置, 每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i ...

  7. 基于Netty4手把手实现一个带注册中心和注解的Dubbo框架

    阅读这篇文章之前,建议先阅读和这篇文章关联的内容. 1. 详细剖析分布式微服务架构下网络通信的底层实现原理(图解) 2. (年薪60W的技巧)工作了5年,你真的理解Netty以及为什么要用吗?(深度干 ...

  8. C++getline()

    #include <iostream>#include <cstring>#include <string>using namespace std;int main ...

  9. BootStrap中模态框踩坑

    在模态框中使用html标签上的自定义属性来打开模态框后,在使用JS关闭模态框,就会出现多层蒙板问题 出现这个问题的原因就是没有仔细看bootstrap的官方文档,我人麻了,搞了好久 务必将模态框的 H ...

  10. Java 处理表格,真的很爽!

    一个简单又快速的表格处理库 大家好,我是鱼皮. 处理 Excel 表格是开发中经常遇到的需求,比如表格合并.筛选表格中的某些行列.修改单元格数据等. 今天给大家分享一个 Java 处理表格的工具库,不 ...