我试图上传一个图像到内存使用multer,然后处理它与夏普和保存到磁盘。当我尝试在我的中间件中做多个module.exports时。
错误是:
TypeError FileUpload.Single不是函数
const multer = require("multer");
const sharp = require("sharp");
const MIME_TYPE_MAP = {
"image/png": "png",
"image/jpg": "jpg",
"image/jpeg": "jpeg",
};
const multerStorage = multer.memoryStorage();
const multerFilter = (req, file, cb) => {
const isValid = !!MIME_TYPE_MAP[file.mimetype];
let error = isValid ? null : new Error("Invalid mime type");
cb(error, isValid);
};
const fileUpload = multer({
storage: multerStorage,
fileFilter: multerFilter,
});
const resizeUserPhoto = (req, res, next) => {
if (!req.file) return next();
req.file.filename = `hero-${Date.now()}`;
sharp(req.file.buffer)
.resize(400, 400, {
fit: sharp.fit.outside,
})
.toFormat("jpeg")
.jpeg({ quality: 80 })
.toFile(`uploads/images/${req.file.filename}`);
next();
};
module.exports = { fileUpload: fileUpload, resizeUserPhoto: resizeUserPhoto };
到目前为止的路线是:
const express = require("express");
const userController = require("../controllers/userController");
const fileUpload = require("../middleware/file-upload");
router.post(
"/update-avatar",
fileUpload.single("image"),
userController.updateAvatar
);
当我刚刚有下面的路由之前,尝试添加图像处理,我没有得到一个错误;
module.exports = fileUpload;
看起来您正在导入整个
更新routes文件以解构
const express = require("express");
const userController = require("../controllers/userController");
const { fileUpload } = require("../middleware/file-upload"); // only grab the export you are using
router.post(
"/update-avatar",
fileUpload.single("image"),
userController.updateAvatar
);