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