使用fs.createWriteStream的Nodejs请求在套接字函数io.on中写入零字节

时间:2018-04-01 03:30:09

标签: node.js socket.io request fs

我正在尝试使用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.createWriteStreamio.on(myVar, function(socket){//write the file});范围内时,零字节被写入文件。

我知道我缺少一些基本的东西,我只是不知道它是什么。

这是一个关于异步功能和时间的问题吗?

1 个答案:

答案 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");

打印

  

转到代码中的下一行
  这将是最后一行打印