首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在multer中处理错误?

在multer中处理错误?
EN

Stack Overflow用户
提问于 2021-10-08 11:00:39
回答 1查看 37关注 0票数 0

对于错误处理,multer建议

代码语言:javascript
运行
复制
const multer = require('multer')
const upload = multer().single('avatar')

app.post('/profile', function (req, res) {
  upload(req, res, function (err) {
    if (err instanceof multer.MulterError) {
      // A Multer error occurred when uploading.
    } else if (err) {
      // An unknown error occurred when uploading.
    }

    // Everything went fine.
  })
})

我写了一个自定义的中间件来上传不同类型的文件。

代码语言:javascript
运行
复制
const { check } = require("express-validator")
const multer  = require('multer')
const mime = require('mime-types')

const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/')
    },
    filename: function (req, file, cb) {
        const filename = Date.now()+"-"+file.originalname
        cb(null, filename)
    }
})
const upload = multer({ storage: storage })

const uploadFile = (fieldname,filetypes,fileSize)=>{
    return (req,res,next)=>{
        let file = upload.single(fieldname)
        file(req,res,function(err){
            if (err instanceof multer.MulterError) {
                req.fileError = {
                    param: "image",
                    msg: "Unable to process request"
                }
                return next()
            } else if (filetypes.includes(mime.extension(req.file.mimetype)) === false) {
                req.fileError = {
                    param: "image",
                    msg: `Only ${filetypes.toString()} allowed`
                }                
                return next()
            } else if (req.file.size > fileSize) {
                req.fileError = {
                    param: "image",
                    msg: `File size should not exceed ${formatBytes(req.file.size)}`
                }                
                return next()
            }
        })
    }
}

course_validator = [
    check("name")
    .trim()
    .isLength({min:3,max:100})
    .withMessage("Course name should be between 3 to 100 characters")
]
app.get("/create/post",uploadFile("image",["jpeg","jpg"],122880),(req,res)=>{

    const errors = validationResult(req)
    if(!errors.isEmpty()){
        return res.json({
            status: false,
            error: req.fileError ? [...errors.array(),req.fileError] : errors.array()
        })
    }
})

如果没有错误,那么只需要我上传文件到uploads文件夹。当我上传的不是jpeg或jpg,我得到了错误的消息,只允许jpeg,jpg。这就是我需要的。但问题是文件也会被上传到uploads文件夹。

EN

回答 1

Stack Overflow用户

发布于 2021-10-08 11:52:17

对于自定义错误消息,您可以通过此控制器进行检查。我正在检查上传图像和控制器时的文件类型,如果当时没有选择任何文件,我将发送一个自定义消息,条件是传递完所有if图像和产品后将保存在数据库中

代码语言:javascript
运行
复制
exports.postProduct = (req, res, next) => {
  const title = req.body.title;
  const image = req.file;
  const price = req.body.price;
  const description = req.body.description;

 if (!image) {
        return res.status(422).render("admin/add-product", {
          pageTitle: "Add Product",
          path: "/adminproducts",
          hasError: true,
          product: {
            title: title,
            price: price,
            description: description,
          },
          errorMessage: "Atteched file is not an image!!!",
          validationErrors: [],
        });
      }
  const imageUrl = image.path;

  const product = new Product({
    title: title,
    imageUrl: imageUrl,
    price: price,
    description: description,
    userId: req.user,
  });
  product
    .save()
    .then((results) => {
      console.log("Product Created Successfully");
      res.redirect("/admin/products");
    })
    .catch((err) => {
      console.log(err);
    });
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69494804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档