Node.js Busboy 分别解析字段和文件

Posted

技术标签:

【中文标题】Node.js Busboy 分别解析字段和文件【英文标题】:Node.js Busboy parse fields and files seperatly 【发布时间】:2014-04-15 16:21:51 【问题描述】:

我想知道是否可以让 Busboy 分别解析字段和文件。 (我已经删除了bodyParser,因为你可以很容易地用临时文件填充硬盘。)

例如 - 解析器发布字段的中间件(用于所有 POST 请求)

if (req.method === 'POST') 
    var form = new busboy( headers: req.headers, limit:  files: 0  );

    form.on('field', function (fieldname, val, valTruncated, keyTruncated) 
        req.params.body[fieldname] = val;
    );
    form.on('finish', function () 
        next();
    );
    return req.pipe(form);

 else  next(); 

然后在上传页面上使用以下内容,它使用 Busboy 来获取发布的文件。

app.post('/fm/file/upload/:folder', function (req, res) 
    var isFrame = helpers.toBool(req.param('frame'), false),
        uploadService = fmUploadService.create(),
        userId = res.locals.info.User.Id,
        folder = helpers.toInt(req.param('folder', 0));

uploadService.processUploads(userId, folder, req, res, function (uploadError, allowedAccess, files) 
        if (uploadError) 
            if (req.xhr) 
                res.status(500);
                res.json(uploadError);
             else 
                res.render('filemanager/file_upload.jade',  actionUrl: '/fm/file/upload/' + folder, tempData: files, isFrame: isFrame, err: uploadError );
            
            return;
        
        else if (req.xhr) 
            res.status(200);
            res.json(files);
            return;
        
        res.render('filemanager/file_upload.jade',  actionUrl: '/fm/file/upload/' + folder, tempData: files, isFrame: isFrame, err: null );
    );
);

目前文件将始终为 0,因为 Busboy 已在中间件中运行。

【问题讨论】:

您找到解决方案了吗?我有同样的用例,想在我的模型中解析文件,但是在到达路由之前将字段作为中间件来填充 req.body。 我正在为此寻找解决方案。有更新吗? 我不确定我是否正确理解了这个问题,但在 Express 4 中,Multer 单独处理文件上传。 【参考方案1】:

代替

form.on('finish', function () 
    next();
);`

尝试一下

form.on('end', function () 
    next();
);`   

【讨论】:

以上是关于Node.js Busboy 分别解析字段和文件的主要内容,如果未能解决你的问题,请参考以下文章

Node / Busboy:获取文件大小

错误 - ./node_modules/busboy/lib/main.js:1:0 找不到模块:无法解析“fs”

Node.js JSON 异步解析

节点 js busboy 不使用 angular js $http post 发出事件

Node.JS文件系统解析

NodeJS使用busboy上传文件