node.js发布请求句柄与busboy和multer之后

时间:2015-11-26 13:45:04

标签: javascript node.js multer

我正在尝试使用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;

有谁知道这个错误可能是由什么引起的?谢谢!

1 个答案:

答案 0 :(得分:0)

multer已经使用 Busboy,因此您通常不需要同时使用它们,除非您需要multer当前不提供的更精细的访问权限。< / p>

问题是busboy已经读取(并解析)了所有请求数据,因此multer无需读取/解析任何内容。但是,这个问题并不是针对这两个特定模块的。任何两个读取任何/所有请求数据的中间件都会出现此问题。因此,解决方案是选择其中一种。