Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js将带有http.request的文件下载到另一个api_Javascript_Node.js_Rest - Fatal编程技术网

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

Javascript node.js将带有http.request的文件下载到另一个api,javascript,node.js,rest,Javascript,Node.js,Rest,我正在尝试将数据作为http.request的响应发送到文件系统中。调用时,函数文件在桌面上创建,但它只包含文本:[Object]。问题是如何从http.request-response获取实际的文件数据,以及如何将其写入文件。当我直接从rest客户机(如postman)调用api时,文件下载得非常完美,但当node发送调用时,它就不起作用了。 这是我的密码: exports.fileDownload = function(req, res){ //Options are defined her

我正在尝试将数据作为http.request的响应发送到文件系统中。调用时,函数文件在桌面上创建,但它只包含文本:[Object]。问题是如何从http.request-response获取实际的文件数据,以及如何将其写入文件。当我直接从rest客户机(如postman)调用api时,文件下载得非常完美,但当node发送调用时,它就不起作用了。 这是我的密码:

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]文本,而不是文件的实际文本。谢谢。

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();
}
或许可以加上:

响应('end',函数(){

//做点什么

}))


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

谢谢您的回复,但是使用上面的代码并不能正确地结束请求,我是否需要在结束请求之前用request.write()向请求体写入一些内容,还是必须从其他地方调用request.end()。@Case09-实际上,我在考虑异步,您必须等待请求结束,但在文档中,他们会在下一行结束,所以请尝试。编辑答案?