其他常用中间件
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 });

Comments NOTHING