Node(二)——中间件,Cookie,multer

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)),响应对象(responseobject (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。🧨中间件的功能:执行任何代码。修改请求和响应对象。终结请求-响应循环。调用堆栈中的下一个中间件。
接上篇

五、express中间件

中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)),响应对象(response
object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。

🧨中间件的功能:

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

(1)应用级中间件

//  应用级中间件(用于权限判断 )
app.use((req,res,next)=>{
    console.log(new Date());
    // console.log("")
    next() //如果想继续向下执行app...,就需要写next()
})

(2)内置中间件

可以配置静态服务目录

//静态服务

app.use("/static",express.sat

(3)第三方中间件

body-parser 中间件 第三方 获取post提交数据

cnpm i body-parser --save

var bodyParser=require("body-parser")

设置中间件

//处理form表单的中间件

app.use(bodyParser.urlencoded({extended:false})); 
//form表单提交的数据

(4)路由级中间件

// 路由级中间件(用的比较少)
app.get("/news/add",(req,res,next)=>{
    // res.send("执行增加新闻")
    console.log("执行增加新闻")
    next()

})

(5)错误中间件

// 3.错误中间件
app.use((req,res,next)=>{
   res.status(404).send("404")
})

六、Cookie

(1)概念

cookie是存储于访问者的计算机中的变量,可以让我们用同一个浏览器访问同一个域名的时候共享数据

也可以把上次输入的用户名保存,在下次打开该页面是会直接输入框中

就像京东没有登陆时,也可以把商品添加到购物车,而这添加就被保存在cookie里

(2)使用

在这里插入图片描述

✨✨✨

属性 描述
domain 域名name =value 键值对,可以设置要保存的key/value ,注意这里的name不能和其他属性项的名字一样
Expires 过期时间(秒),在设置的某个时间点后该Cookie 就会失效
maxAge 最大失效时间(毫秒),设置在多少后失效
secure 当secure值为true时,cookie 在HTTP中是无效的,在HTTPS中才有效的
Path 表示cookie影响到的路径,如path=/ ,如果路径不能匹配时,浏览器则不能发送COOKIE
httpOnly 是微商对COOKIE做的扩展,如果在COOKIE中设置了“httpOnly”属性,则通过程序(JS脚本)将无法读取到COOKIE信息,防止攻击XXS攻击产生
signed 表示是否签名cookie,设为true会对这个cookie签名,这样就需要用res.signedCookies而不是res.cookies访问它,被篡改的签名cookie会被服务器被拒绝,并且cookie值会重置为它的原始值

七、express session的基本使用

(1)简单介绍

session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而session保存在服务器上

(2)session的工作流程

当浏览器访问服务器并发送第一次请求时,服务器会创建一个session对象,生成一个类似于key,value的键值对,然后key(cookie) 返回到浏览器端,浏览器下次在访问时,携带key(cookie),找到相对应的session(value)

(3)express-session的使用

//安装
cnpm i express-session --save
//引入express-session
var session=require("express-session")
//设置官方文档提供的中间件
app.use(session({
secret:"keyboard cat",
resave:true,
saveUninitialized:true
}))
//使用
设置值 req.session.username="张三"
获取值 req.session.username

(4)负载均衡配置session,把session信息保存到数据库里面

在这里插入图片描述
我们可以把数据存储在数据库里面。

https://www.npmjs.com/package/connect-mongo

 store: MongoStore.create({
    mongoUrl: 'mongodb://user12345:foobar@localhost/test-app?authSource=admin&w=1',
    mongoOptions: advancedOptions // See below for details
  }

现如今connect-mongo以及更新了,如上所示

(5)把session信息保存在redis里面

https://www.npmjs.com/package/connect-redis

npm install redis connect-redis express-session

也可以保存在MySQL里面

https://www.npmjs.com/package/connect-mysql

八、multer上传图片

(1)模块介绍

Multer 是一个node.js中间件,用于处理表单数据,它主要用于上传文件,它是在busboy之上非常高效

注意:Multer 不会处理任何非multipart/form-date类型的表单数据

(2)使用

安装:npm install --save multer

在这里插入图片描述

(3)express上传文件模块multer的使用

要上传图片的话必须在form表单里添加

<form action="/profile" method="post" enctype="multipart/form-data">
  <input type="file" name="avatar" />
</form>

(4)指定图片文件名的方法

//-------------------------------
//-------------------
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)
    cb(null, file.fieldname + '-' + uniqueSuffix)
  }
})

const upload = multer({ storage: storage })

(5)express按照日期生成上传文件目录,也可以上传文件

在这里插入图片描述

https://www.npmjs.com/package/silly-datetime

npm i silly-datetime --save

创建目录 npm i mkdirp --save

(6)上传多个文件

在这里插入图片描述


const multer = require("multer")
const path = require("path")
const sd=require("silly-datetime")
const mkdirp=require("mkdirp")
let tools = {
  multer() {
    // 配置上传目录
    const storage = multer.diskStorage({
      destination: async (req, file, cb) =>{
        // 1.获取当前日期
        let day=sd.format(new Date(),"YYYYMMDD")
        
        let dir=path.join("static/upload",day)
        // 按照日期生产图片存储目录
       await mkdirp(dir)   //要等待dirp上传完毕,再执行下一行,这是一个异步方法
        cb(null, dir)  ///上传之前目录必须存在
      },
      // 修改上传后的文件名
      filename: function (req, file, cb) {
        // 1.获取后缀名
        let extname = path.extname(file.originalname)
        // 2.根据时间戳生成文件名
        //   const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)
        //   cb(null, file.fieldname + '-' + uniqueSuffix)
        cb(null, Date.now() + "." + extname)
      }
    })
    const upload = multer({ storage: storage })
      return upload
  }
}
module.exports=tools
目录
相关文章
|
11月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
11月前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第36天】在探索Node.js的奥秘之旅中,中间件的概念如同魔法一般,它让复杂的请求处理变得优雅而高效。本文将带你领略这一机制的魅力,从概念到实践,一步步揭示如何利用中间件简化和增强你的应用。
|
11月前
|
消息中间件 JavaScript 中间件
深入浅出Node.js中间件机制
【10月更文挑战第24天】在Node.js的世界里,中间件如同厨房中的调料,为后端服务增添风味。本文将带你走进Node.js的中间件机制,从基础概念到实际应用,一探究竟。通过生动的比喻和直观的代码示例,我们将一起解锁中间件的奥秘,让你轻松成为后端料理高手。
134 1
|
12月前
|
JSON JavaScript 中间件
深入浅出Node.js中间件机制
本文将带你探索Node.js中一个核心概念——中间件机制。我们将通过浅显的语言和生动的比喻,揭示中间件如何作为请求和响应之间的“交通枢纽”,在应用程序中起到至关重要的作用。从基础原理到实际应用,你将了解到中间件不仅简化了代码结构,还提高了开发效率,是Node.js开发不可或缺的一部分。
132 1
|
12月前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第4天】在探索Node.js的海洋中,中间件机制犹如一座灯塔,为开发者指引方向。本文将带你一探究竟,从浅入深地理解这一核心概念。我们将通过生动的比喻和实际代码示例,揭示中间件如何在请求和响应之间搭建桥梁,实现功能的扩展与定制。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
149 0
|
3月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
787 11
|
8月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
7月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
5824 26
|
8月前
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
426 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
8月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!

热门文章

最新文章