2014-01-30 45 views
4

我使用的是requestnode-canvas模块尝试下载并处理图像:的Node.js - 下载和处理图像的“要求”和“节点画布”

var request = require('request'); 
var Image = require('canvas').Image; 

var url = 'http://farm8.staticflickr.com/7333/11286633486_070f0d33bc_n.jpg'; 

request.get({ url: url, encoding: null }, function(err, res, body) { 
    if (err) throw err; 

    var image = new Image(); 

    image.onerror = function() { 
     console.error(arguments); 
    }; 

    image.onload = function() { 
     console.log('loaded image'); 
    }; 

    image.src = new Buffer(body, 'binary'); 
}); 

我得到的错误'Error: error while reading from input stream'(onerror事件被触发)。但是当我在浏览器中点击上面的图片网址时,它会按预期显示图片。

我在做什么错?

+1

它按预期的方式工作,发生onload事件。你使用的是什么版本的节点,请求和画布? – mutil

+0

我正在使用Node v0.10.21。我通过npm安装了请求和画布,所以我认为它们是最新版本。 我在OSX 10.9(小牛)上运行,我按照说明安装了Pixman和Cairo。 –

+0

canvas是v1.1.3。请求是2.33.0 –

回答

-1

修好了!

似乎我在OSX(node-canvas的依赖关系)上安装了pixman和/或cairo,可能是因为我试图通过自制软件安装它们。

解决的办法是从获得使用自制软件清除它们:

brew uninstall cairo 
brew uninstall pixman 

...然后运行:

brew doctor 

..to检查是否有破损的符号链接等相关开罗和pixman。然后,您必须使用Finder手动删除任何cairo & pixman bin/libs/symlinks等。

接下来,按照install instructions for node-canvas在OSX上重新安装cairo和pixman。

最后,您可能需要通过npm重新安装节点画布,所以导航到您的'node_modules'文件夹并删除'canvas'目录。然后运行:

npm install canvas