为什么req.busboy未定义?

时间:2014-09-23 11:15:14

标签: javascript node.js express busboy

我在Express.js 4中使用connect-busboy来上传文件。我在app.js中添加了app.use(busboy({ immediate: true });我的路由处理程序如下所示:

router.post('/upload', function (req, res) {
    var fstream;

    req.pipe(req.busboy);
    console.log(req.busboy);
    req.busboy.on('file', function (fieldName, file, fileName) {
        console.log('Uploading ' + fileName + '...');
        fstream = fs.createWriteStream(__dirname + '/data/' + fileName);
        file.pipe(fstream);
        fstream.on('close', function () {
            res.end('ok');
        });
    });
});

console.log(req.busboy);返回undefined。为什么呢?!??!

2 个答案:

答案 0 :(得分:3)

把它整理出来!事实证明,contentType应为form/multi-part,但事实并非如此

答案 1 :(得分:1)

对于多部分表格:

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary63SFlxFGGDbxCqT7

边界是随机生成的,因此为了使其在Node Express中工作,建议将此标头设置为“未定义”,浏览器将负责其余部分。例如:

$http({
        method: 'POST',
        url: 'http://youurl.com,
        data: data,
        // Remove the 'Content-Type' header for multipart form submission
        headers: { 'Content-Type': undefined },
    }).then(function successCallback(response) {
        // this callback will be called asynchronously
        // when the response is available
    }, function errorCallback(response) {
        // called asynchronously if an error occurs
    });

对于与乔丹有同样问题的人:

  

“你能否更具体一点。关于什么的内容类型?”

这意味着在从浏览器发送到Web服务器的请求中设置“Content-Type”标头。例如,将内容类型标头设置为JSON如下所示:

Content-Type: application/json; charset=utf-8