【发布时间】:2016-09-29 13:18:17
【问题描述】:
如果已经将条目添加到数据库中,我在试图弄清楚如何阻止 Multer 上传文件时遇到了一些麻烦。
在我的场景中,我有一个多部分表单,您可以在其中添加指定 id 的啤酒。它有 2 个输入,一个带有文本输入 (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”(进行查询)然后决定是否要上传文件吗?
【问题讨论】:
标签: node.js express multipartform-data multer