2022-11-24 11:18:27 +08:00

83 lines
1.9 KiB
JavaScript

const jwt = require("jsonwebtoken");
const md5 = require("md5");
const fs = require("fs");
const multer = require("multer");
const path = require("path");
const { UnknownError } = require("./errors");
// 格式化要响应的数据
module.exports.formatResponse = function (code, msg, data) {
return {
code,
msg,
data,
};
};
// 解析客户端传递过来的 token
module.exports.analysisToken = function (token) {
return jwt.verify(
token.split(" ")[1],
md5(process.env.JWT_SECRET),
function (err, decode) {
return decode;
}
);
};
/**
* 读取一个目录下有多少个文件
* @param {*} dir 目录地址
*/
async function readDirLength(dir) {
return new Promise((resolve) => {
fs.readdir(dir, (err, files) => {
if (err) throw new UnknownError();
resolve(files);
});
});
}
/**
* 生成一个随机头像的路径
*/
module.exports.randomAvatar = async function () {
const files = await readDirLength("./public/static/avatar");
const randomIndex = Math.floor(Math.random() * files.length);
return "/static/avatar/" + files[randomIndex];
};
// 设置上传文件的引擎
const storage = multer.diskStorage({
// 文件存储的位置
destination: function (req, file, cb) {
cb(null, __dirname + "/../public/static/uploads");
},
// 上传到服务器的文件,文件名要做单独处理
filename: function (req, file, cb) {
// 获取文件名
const basename = path.basename(
file.originalname,
path.extname(file.originalname)
);
// 获取后缀名
const extname = path.extname(file.originalname);
// 构建新的名字
const newName =
basename +
new Date().getTime() +
Math.floor(Math.random() * 9000 + 1000) +
extname;
cb(null, newName);
},
});
// 文件上传
module.exports.uploading = multer({
storage: storage,
limits: {
fileSize: 2000000,
files: 1,
},
});