提问者:小点点

尝试导出多个模块时出错。导出


我试图上传一个图像到内存使用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;

共1个答案

匿名用户

看起来您正在导入整个,而不是只选择您需要的导出。

更新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
);