Ошибка при попытке экспортировать более одного модуля.экспорт

#node.js

#node.js

Вопрос:

Я пытаюсь загрузить изображение в память с помощью multer, затем обработать его с помощью sharp и сохранить на диск. Когда я пытаюсь выполнить несколько 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. Похоже, проблема связана с вашим файлом маршрута. Если module.exports = {fileUpload, resizeUserPhoto} вы хотите, чтобы это выглядело так: const { fileUpload } = require('../middleware/file-upload');

2. Иногда требуется просто вторая пара глаз, чтобы доказать, что мы не сумасшедшие.

3. Ха-ха, да, верно! Если вы хотите добавить это в качестве ответа, я могу закрыть вопрос. Или я могу удалить его, если вы предпочитаете?

4. Я добавлю ответ….

Ответ №1:

Похоже, вы импортируете все целиком module.exports , а не выбираете только нужный вам экспорт.

Обновите файл маршрутов, чтобы разрушить fileUpload экспорт:

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