解析分块表单数据,然后使用Multer(Node模块)上传文件 [英] Parse multipart form data and then upload a file with Multer (Node module)

查看:22
本文介绍了解析分块表单数据,然后使用Multer(Node模块)上传文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果已将条目添加到数据库,我在尝试确定如何阻止Multer上载文件时遇到一些问题。

在我的场景中,我有一个由多部分组成的表单,您可以在其中添加指定ID的啤酒。它有两个输入,一个带有文本输入(Id),另一个带有文件输入(BeerImage)。

我想要做的是,在上载文件之前,检查它是否已存在于数据库中,如果没有,则上载该文件。目前,我的代码是先上传文件,然后检查它是否存在,这是一件坏事!

这是我的代码:

var express = require('express');
var router = express.Router();
var multer = require('multer');
var database = require('../services/database');

var upload = multer({ dest: 'uploads/' });
var cpUpload = upload.fields([{ name: 'beerImage', maxCount: 1 } ]);

router.route('/beers')
    .post(function (req, res, next) {
        // I'd like to use req.body.id in the query here, but it doesn't exist yet!
        cpUpload(req, res, function (err) {
            if (err) {
                return next(new Error('Error uploading file: ' + err.message + ' (' + err.field + ')'));
            } else {
                database.getConnection().done(function (conn) {
                    conn.query('SELECT COUNT(*) AS beersCount FROM beers WHERE id=?', req.body.id, function (err, rows, fields) {
                        if (err) {
                            conn.release();
                            return next(err);
                        }

                        if (rows[0].beersCount > 0) {
                            conn.release();
                            return next(new Error('Beer "' + req.body.id + '" already exists!'));
                        } else {
                            delete req.body.beerImage;
                            conn.query('INSERT INTO beers SET ?', req.body, function (err, rows, fields) {
                                conn.release();

                                if (err) {
                                    return next(err);
                                }

                                res.json({ message: 'Beer "' + req.body.id + '" added!' });
                            });
                        }
                    });
                });
            }
        });
    });

module.exports = router;

我找不到一种方法来首先"解析"多部分表单数据(能够执行查询并使用req.body.id检查它是否存在),然后决定是否要上传文件。看来"cpUpload"同时做了这两件事!

您知道如何首先获取"req.body.id"(以执行查询),然后决定是否要上载文件吗?

推荐答案

我意识到Multer上有一个名为"FileFilter"的函数,您可以在其中控制接受哪些文件。在这里,我可以执行所需的查询以检查该条目是否存在。

这篇关于解析分块表单数据,然后使用Multer(Node模块)上传文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆