我正在尝试使用busboy(或多方)和multer来解析我的请求。首先,我收到我的请求感谢busboy,我将创建一些文件夹并更新我的数据库。其次,当我打电话给multer时没有任何反应。我的请求不是解析。并且multer不是电话。 我不明白为什么。
这是我的DBAccess.js类:
var multer = require('multer');
var DBManager = require('./DBManager');
var Busboy = require('busboy');
var inspect = require('util').inspect;
function beforeMulter(req,res,next) {
var meshName='';
var type='';
var busboy = new Busboy({ headers: req.headers });
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
console.log('File [' + fieldname + ']: filename: ' + filename + ', encoding: ' + encoding + ', mimetype: ' + mimetype);
file.on('data', function(data) {
console.log('File [' + fieldname + '] got ' + data.length + ' bytes');
});
file.on('end', function() {
console.log('File [' + fieldname + '] Finished');
});
});
busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
console.log('Field [' + fieldname + ']: value: ' + inspect(val));
if(fieldname== 'name') {
meshName = val;
}
if(fieldname == 'type') {
type=val;
req.params.id=1;
}
});
busboy.on('finish', function() {
console.log('Done parsing form!');
next();
});
req.pipe(busboy);
}
function uploadManager(req,res,next) {
upload(req, res, function (err) {
if (err) {
console.log(err);
}
console.log(req.originalUrl);
next();
});
}
var storage = multer.diskStorage({
destination: function (req, file, cb) {
console.log("In destination");
console.log("ID : " + req.params.id);
DBManager.initialize();
var path=DBManager.createDestination(req.params.id,req.originalUrl);
cb(null, path);
},
filename: function (req, file, cb) {
console.log("In filename");
var extension = file.originalname.split(".")[1];
cb(null, req.body.name.split(".")[0] + Date.now() + "." + extension);
}
});
var upload = multer({storage: storage}).single('file');
module.exports.uploadManager = uploadManager;
module.exports.upload = upload;
module.exports.beforeMulter = beforeMulter;
我的router.js:
var db_access = require('../DBAccess');
var db_manager = require('../DBManager');
var express = require('express');
var router = express.Router();
router.post('/create',
db_access.beforeMulter,
db_access.uploadManager,
function(req, res,next){
//console.log(req.body)
//console.log(req.files)
res.status(204).end()
});
module.exports = router;
有谁知道这个错误可能是由什么引起的?谢谢!
答案 0 :(得分:0)
multer
已经使用 Busboy,因此您通常不需要同时使用它们,除非您需要multer
当前不提供的更精细的访问权限。< / p>
问题是busboy
已经读取(并解析)了所有请求数据,因此multer
无需读取/解析任何内容。但是,这个问题并不是针对这两个特定模块的。任何两个读取任何/所有请求数据的中间件都会出现此问题。因此,解决方案是选择其中一种。