可以通过Multer FileFilter错误来表达

发布于 2025-01-30 16:10:00 字数 1931 浏览 3 评论 0 原文

我正在尝试使用Multer上传。

我为此创建了一个额外的文件,这是FileUpload文件:

const multer = require("multer");
const { v4: uuidv4 } = require("uuid");
const { join, extname } = require("path");

const fileStorage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, join(__dirname, "../public/Uploads"));
  },
  filename: function (req, file, cb) {
    cb(null, `${uuidv4()}${extname(file.originalname)}`);
  },
});

const uploadFile = multer({
  storage: fileStorage,
  fileFilter: function (req, file, cb) {
    if (!file.originalname.match(/\.(jpg|jpeg|png)$/)) {
      req.fileValidationError = "نوع فایل مورد قبول نیست!";
      return cb(new Error("نوع فایل درست نیست"), false);
    }
    cb(null, true);
  },
});

module.exports = uploadFile;

当文件扩展名与我的期望不符合我的期望时,我想通过错误,但我无法将错误传递到表达。 这是我的路由器:

const express = require("express");
const router = express.Router();
const ProfilePicture = require("../models/profilePicture");
const { join, extname } = require("path");
const fs = require("fs");
const upload = require("../tools/fileUpload");

router.post(
  "/changeProfile",
  upload.single("profile_pic"),
  async (req, res) => {
    try {
      const { image } = await ProfilePicture.findOne({});
      await fs.unlink(join(__dirname, `../public/Uploads/${image}`), (err) => {
        if (err) throw err;
      });

      await ProfilePicture.deleteMany();

      await ProfilePicture.create({ image: req.file.filename });
      return res.status(200).send({ success: true });
    } catch (error) {
      if (!req.file) {
        return res
          .status(500)
          .render("error/500", { err: "نوع فایل مورد قبول نیست!" });
      }
      console.log(extname(req.file));

      console.log(error);
      return res.status(500).render("error/500", { err: error });
    }
  }
);

module.exports = router;

我真的很想找到一种方法来传递错误以表达并不使用CB()将其记录到控制台。

I'm trying uploading with multer.

I created an extra file for this and here is the fileUpload file:

const multer = require("multer");
const { v4: uuidv4 } = require("uuid");
const { join, extname } = require("path");

const fileStorage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, join(__dirname, "../public/Uploads"));
  },
  filename: function (req, file, cb) {
    cb(null, `${uuidv4()}${extname(file.originalname)}`);
  },
});

const uploadFile = multer({
  storage: fileStorage,
  fileFilter: function (req, file, cb) {
    if (!file.originalname.match(/\.(jpg|jpeg|png)$/)) {
      req.fileValidationError = "نوع فایل مورد قبول نیست!";
      return cb(new Error("نوع فایل درست نیست"), false);
    }
    cb(null, true);
  },
});

module.exports = uploadFile;

And I want to pass an error when file extension doesn't match my expectation but i can't pass the error to express.
Here is my router:

const express = require("express");
const router = express.Router();
const ProfilePicture = require("../models/profilePicture");
const { join, extname } = require("path");
const fs = require("fs");
const upload = require("../tools/fileUpload");

router.post(
  "/changeProfile",
  upload.single("profile_pic"),
  async (req, res) => {
    try {
      const { image } = await ProfilePicture.findOne({});
      await fs.unlink(join(__dirname, `../public/Uploads/${image}`), (err) => {
        if (err) throw err;
      });

      await ProfilePicture.deleteMany();

      await ProfilePicture.create({ image: req.file.filename });
      return res.status(200).send({ success: true });
    } catch (error) {
      if (!req.file) {
        return res
          .status(500)
          .render("error/500", { err: "نوع فایل مورد قبول نیست!" });
      }
      console.log(extname(req.file));

      console.log(error);
      return res.status(500).render("error/500", { err: error });
    }
  }
);

module.exports = router;

I really want to find a way to pass the error to express and not logging it to console with cb().

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花想c 2025-02-06 16:10:00

您可以使用 multer 错误错误>错误处理中间件例如,

router.use(function(err, req, res, next) {
  res.render("my_error_page", {error: err});
});

You can handle the multer error with an error-handling middleware, for example,

router.use(function(err, req, res, next) {
  res.render("my_error_page", {error: err});
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文