node.js将带有http.request的文件下载到另一个api

时间:2014-02-01 16:12:47

标签: javascript node.js rest

我正在尝试将文件写入文件系统,并将数据作为http.request的响应发送。当我调用函数文件是在桌面上创建但它只包含文本:[对象对象]。问题是如何从http.request响应中获取实际文件数据以及如何将其写入文件。当我像邮递员一样直接从休息客户端调用api时,文件下载完美,但是当节点发送调用时,它无法正常工作。 这是我的代码:

exports.fileDownload = function(req, res){
//Options are defined here

var request = http.request(options, function (res, err) {
    if(err){
        //Error handling
    }
});

request.on('error', function (e) {
    //Error handling
});    

request.on('response', function(data){       
    fs.writeFile("C:/Users/Test/Desktop/file.txt", data, 'binary', function(err){
        if(err){
            //Error handling
        }
        else{
            console.log("Done");
        }
    })

})
request.end()
}

这里有什么问题,所以当调用这个函数时,它会创建一个名为file.txt的文件,其中包含[Object object]文本,而不是文件的实际文本。感谢。

2 个答案:

答案 0 :(得分:1)

http.request在回调中返回一个响应对象,包含标题等。您必须将事件处理程序绑定到该响应对象并等待实际数据,如下所示:

exports.fileDownload = function (req, res) {
    //Options are defined here

    var request = http.request(options, function (resp, err) {
        if (err) {
            //Error handling
        } else {
            resp.on('data', function (chunk) {
                fs.writeFile("C:/Users/Test/Desktop/file.txt", chunk, function (err) {
                    if (err) {
                        //Error handling
                    } else {
                        console.log('Done');
                    }
                });
            });
        }
    });
    request.end();
}

答案 1 :(得分:0)

或许添加:

resp.on('end',function(){

//做点什么

});

只有在“结束”事件触发后才能获取/发送所有数据。