проверить тело запроса перед загрузкой файла с помощью multer - PullRequest
0 голосов
/ 19 сентября 2018

В настоящее время я работаю над API с nodejs.Я хочу, чтобы пользователь загружал файлы вместе с другими необходимыми деталями.но проблема в том, что multer загружает файл, прежде чем я смогу проверить необходимые данные, которые передает пользователь.Можно ли загрузить файл только после проверки значений req.body?

Мой текущий код:

router.post("/", upload.single("gallery_item_image"), function (req, res, next) {
    Branch
        .findById({ _id: req.body.branch_id })
        .exec()
        .then((doc) => {
            if(!doc || req.body.branch_id.length < 24) {
                return res.status(404).json({
                    message: "Invalid Branch ID",
                })
            }
            galleryItem = new GalleryItem({
                _id: mongoose.Types.ObjectId(),
                branch_id: req.body.branch_id,
                caption: req.body.caption,
                description: req.body.description,
                absoluteImagePath: req.file.path,
                imagePath: "some.url"
            })
            return galleryItem.save()
        })
        .then((response) => {
                console.log(response);
                res.status(201).json({
                    message: "Gallery item successfully added to the database",
                    galleryItem: {
                        _id: response._id, 
                        branch_id: response.branch_id, 
                        imagePath: response.imagePath.replace("\\", "/"),
                        caption: response.caption, 
                        description: response.description, 
                        date: response.date,
                        absoluteImagePath: response.absoluteImagePath,
                        meta: {
                            type: "GET", 
                            url: "some.url",
                        }
                    }
                })
            })
        .catch((error) => {
            console.log(error);
            res.status(500).json({
                error: error
            })
        })
})

1 Ответ

0 голосов
/ 21 сентября 2018

Я думаю, что вы можете использовать промежуточное программное обеспечение до того, как оно станет действительно промежуточным.Например, следующий код:

const validator = function(req, res, next) {
    // Do some validation and verification here
    if(okay)
       return next();
    else
       return res.status(400).send({message: 'Invalid Arguments(For Example!)'})
}

И используйте эту функцию в качестве промежуточного программного обеспечения перед загрузкой. Просто так:

router.post("/", validator, upload.single("gallery_item_image"), function (req, res, next) {
    // Your code goes here
}

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...