Javascript node.js将带有http.request的文件下载到另一个api
我正在尝试将数据作为http.request的响应发送到文件系统中。调用时,函数文件在桌面上创建,但它只包含文本:[Object]。问题是如何从http.request-response获取实际的文件数据,以及如何将其写入文件。当我直接从rest客户机(如postman)调用api时,文件下载得非常完美,但当node发送调用时,它就不起作用了。 这是我的密码: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
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-实际上,我在考虑异步,您必须等待请求结束,但在文档中,他们会在下一行结束,所以请尝试。编辑答案?