我正在尝试使用request从远程资源检索图像文件,并将该流写入服务器上的目录。这可以使用下面的代码,但我的文件没有数据:
io.on(myVar, function(socket){
var requestSettings = {
url: 'https://www.google.com/images/srpr/logo11w.png',
method: 'GET',
encoding: null
};
var imgpath="./public/img/file.png";
var response_stream = request(requestSettings)
.pipe(fs.createWriteStream(imgpath))
.on('close', function() {
console.log('This will be the last line printed');
})
.on('error', function(err) {
console.log('err', err);
});
console.log("Move to the next line in the code");
});
我遇到的问题是当fs.createWriteStream
在io.on(myVar, function(socket){//write the file});
范围内时,零字节被写入文件。
我知道我缺少一些基本的东西,我只是不知道它是什么。
这是一个关于异步功能和时间的问题吗?
答案 0 :(得分:1)
我运行了你的代码并得到了以下错误并获得了listener
TypeError
events.js:238
throw new TypeError('"listener" argument must be a function');
^
TypeError: "listener" argument must be a function
查看文档,我们可以看到close
事件将函数作为参数
事件:'关闭'
表示基础连接已关闭。就像'结束'一样,每个响应只发生一次此事件。
来源 Node.js doc
所以,对代码进行更改
'use strict';
let request = require('request');
let fs = require('fs');
var requestSettings = {
url: 'https://www.google.com/images/srpr/logo11w.png',
method: 'GET',
encoding: null
};
var imgpath = "./file.png";
var response_stream = request(requestSettings)
.pipe(fs.createWriteStream(imgpath))
.on('close', function() {
console.log('This will be the last line printed');
})
.on('error', function(err) {
console.log('err', err);
});
console.log("Move to the next line in the code");
打印
转到代码中的下一行
这将是最后一行打印