NodeJs:在猫鼬数据验证之前,multer上传文件

问题描述 投票:0回答:1

我想使用npm软件包multer将用户个人资料图片上传到服务器。所以我配置了如下所示的multer:

var multer = require('multer');

var storage = multer.diskStorage({

    //Setting up destination and filename for uploads
    destination: function (req, file, cb) {  
        cb(null, 'uploads/');
    },
    filename: function (req, file, cb) {  
        cb(null, Date.now() + file.originalname);
    }

});

var upload = multer({
    storage: storage,
    limits:{
        fieldSize: 1024*1024*6,
    }
});

我也有一个存储电子邮件,密码和图片路径的用户模型:

var makerSchema = new mongoose.Schema({
    email:{
        type:String,
        validate: [validator.isEmail, "Please enter a valid E-mail!" ]

    },
    password:{
        type:String,
        required:[true, "Password is a required field"],
        minlength: 6,
        maxlength:1000
    },
     imagePath:{
        type:String
    }
},{
    timestamps:true
})

下面是我的路线:

router.post('/maker',upload.single('makerImage'), async (req, res) => {
    //Check if image is uploaded(gives no error though)
    var imagePath = "";
    if (req.file) {
        imagePath=req.file.path;
    }

    //creating body for object
    var data = {
        email: req.body.email,
        password: req.body.password,
        imagePath
    }

    try {
        var maker = new Maker(data);
        await maker.save();

        res.status(200).send();
    } catch (error) {
        res.send(error);
    }
})

现在,虽然我没有输入用户名,但我输入了错误的电子邮件或密码。但是无论如何,文件都会上传到上载文件夹。如何解决此问题?

node.js express post file-upload multer
1个回答
0
投票

[我看到upload.single(‘makerImage’)中间件在您的处理程序之前执行。因此,解决方案之一-拆分输入凭据和图像上传。您将需要单独的路线来上传图片。

因此,首先,您验证登录名和密码,然后可以从UI(使用单独的路由)上载图像。

另一种解决方案:通过multer临时将图像保存在内存中,然后如果登录名和密码正确,则将其保存到磁盘中

© www.soinside.com 2019 - 2024. All rights reserved.