【问题标题】:NodeJs: multer uploads file before mongoose data validationNodeJs:multer在猫鼬数据验证之前上传文件
【发布时间】:2020-04-07 20:39:11
【问题描述】:

我想使用 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】:

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

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

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

    【讨论】:

    • 第二种方法如何实现?
    • 将文件保存在临时文件夹中更容易(与您一样,但在另一个文件夹中),然后验证凭据,如果它们不正确,您可以使用 fs.unlinkSync(path) 从临时文件夹中删除文件。如果它们是正确的,您可以将文件从临时文件夹移动到您需要的文件夹。
    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    相关资源
    最近更新 更多