07-其他常用中间件

nobility 发布于 2025-05-14 01-Express 885 次阅读


其他常用中间件

cookies

在请求对象中添加的cookie信息(request.cookies),需要先使用npm install cookie-parser 安装cookie-parser包,再请求之前添加该中间件即可,具体参考下面代码

/***********解析 request.cookies 模块************/
const cookieParser = require("cookie-parser");
app.use(cookieParser());

session

在请求对象中添加的session信息(request.session),需要先使用npm install express-session 安装express-session包,再请求之前添加该中间件即可,具体参考下面代码

/***********解析 request.session 模块************/
const session = require("express-session");
app.use(session({
  name: 'session.id',	//cokkie中存储的sessionId名
  secret: "secret",	//密钥
  resave: true, //是否请求重置cookie过期时效,默认true,不设置会报警告
  saveUninitialized: true,  //是否对于没有cookie的请求也设置上cookie,默认true,不设置会报警告
  cookie: {
    // path: '/',	//session作用范围,默认就是 /
    // httpOnly: true,	//只允许服务端修改,默认就是true
    maxAge: 30 * 1000	//session失效时间,单位毫秒
  }
}))

/***********解析 request.session 模块存入redis中的配置************/
const session = require("express-session");
const RedisStore = require("connect-redis")(session);	//若想将session存入redis,则需要下载connect-redis包
const sessionStore = new RedisStore({	//创建session仓库
  clinent: require("./redisClinent")	//redis的连接对象,redisClinent文件需要自己提供
});
app.use(session({
  name: 'session.id',	//cokkie中存储的sessionId名
  secret: "secret",	//密钥
  resave: true, //是否请求重置cookie过期时效,默认true,不设置会报警告
  saveUninitialized: true,  //是否对于没有cookie的请求也设置上cookie,默认true,不设置会报警告
  cookie: {
    // path: '/',	//session作用范围,默认就是 /
    // httpOnly: true,	//只允许服务端修改,默认就是true
    maxAge: 30 * 1000	//session失效时间,单位毫秒
  },
  store: sessionStore	//将session存入session仓库中
}))

日志记录

使用npm install morgan安装该日志中间件

第一个参数为日志格式(可使用预设格式),第二个参数是配置项,其他日志格式和具体使用方式可从**官方**获得,一般开发环境和生产环境用默认格式和配置即可

开发环境配置

const morgan = require("morgan");	//引入morgan
app.use(morgan("dev"));	//默认标准输出,开发环境中使用的开发格式

生产环境配置

const path = require("path");
const fs = require("fs");
const morgan = require("morgan");	//引入morgan
const logFile = path.join(__dirname, "log", "access.log");  //日志文件路径
const logStream = fs.createWriteStream(logFile, { flags: "a" });  //日志追加流
app.use(morgan("combined", {  //日志格式为全模式
  stream: logStream //向日志最佳流中写访问日志记录
}));

文件上传

使用npm install multer安装该文件上传中间件

单文件上传

<form action="/upload" method="post" enctype="multipart/form-data">
<!-- 必须指定enctype为multipart/form-data -->
  <input type="file" name="file">
  <input type="submit" value="上传">
</form>
var multer = require("multer");
var upload = multer({ dest: "upload/" });

app.post("/upload", upload.single("file"), function (req, res, next) {
  res.send(req.file);
});

多文件同name上传

<form action="/upload" method="post" enctype="multipart/form-data">
<!-- 必须指定enctype为multipart/form-data -->
  <input type="file" name="file" multiple="multiple">
  <!-- 多文件必须指定multiple属性才能多选 -->
  <input type="submit" value="上传">
</form>
var multer = require("multer");
var upload = multer({ dest: "upload/" });

app.post("/upload", upload.array("file",2), function (req, res, next) {
  //最多两个文件上传,若超过两个会抛出MulterError
  //若不指定第二个参数则没有限制
  res.send(req.files);	//注意是files
});

多文件不同name上传

<form action="/upload" method="post" enctype="multipart/form-data">
<!-- 必须指定enctype为multipart/form-data -->
  <input type="file" name="file1">
  <input type="file" name="file2">
  <input type="submit" value="上传">
</form>
var multer = require("multer");
var upload = multer({ dest: "upload/" });

app.post("/upload", upload.fields([{	//该方法接收一个对象数组
    name: "file1",	//file1最多上传两个文件
    maxCount: 2
  },
  {
    name: "file2"	//file2文件
  }
]), function (req, res, next) {
  res.send(req.files); //注意是files
});

自定义文件名

var multer = require("multer");
var storage = multer.diskStorage({	//创建一个硬盘存储对象
  destination: function (req, file, cb) {	//存储目录
    //req为上传文件的请求对象,file为上传的文件对象,cd为一个错误优先的回调函数,一般会传递错误对象,若错误对象为null则不会报错
    //可根据这三个参数,可将复杂操作可以写成该插件的中间件
    cb(null, "./upload");	//必须保证存储目录存在,否则会报错
  },
  filename: function (req, file, cb) {	//存储文件名
    //req为上传文件的请求对象,file为上传的文件对象,cd为一个错误优先的回调函数,一般会传递错误对象,若错误对象为null则不会报错
    //可根据这三个参数,可将复杂操作可以写成该插件的中间件
    cb(null, Date.now() + '-' + file.originalname);	//文件名为时间戳加用户上传时的原文件名
  }
})
var upload = multer({ storage: storage });
加油啊!即便没有转生到异世界,也要拿出真本事!!!\(`Δ’)/
最后更新于 2025-05-14