NodeJs: загрузка файлов с мультиплеера перед проверкой данных в пн goose - PullRequest
0 голосов
/ 07 апреля 2020

Я хотел загрузить изображения профиля пользователя на сервер, используя пакет npm, 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);
    }
})

Теперь при вводе неправильного адреса электронной почты или пароля, хотя пользователь не создан. Но файл загружается в папку загрузки, несмотря ни на что. Как мне решить эту проблему?

1 Ответ

0 голосов
/ 07 апреля 2020

Я вижу, что upload.single(‘makerImage’) промежуточное ПО выполняется перед вашим обработчиком. Итак, одно из решений - раздельный ввод учетных данных и загрузка изображений. Вам потребуется отдельный маршрут для загрузки изображений.

Итак, сначала вы проверяете логин и пароль, а затем позволяете загружать изображения из пользовательского интерфейса (используя отдельный маршрут).

Другое решение: временно сохранить изображение в памяти multer, а затем, если логин и пароль верны, сохранить его на диск

...