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

Node.js Busboy parse fields and files seperatly

本文关键字:字段 文件 js Busboy Node      更新时间:2023-09-26

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

例如-解析post字段的中间件(用于所有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已经在中间件中运行。

代替

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

试试

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