0

我正在调用一个 node'js 进程来抓取 twitter 并从数据中创建一个图表......

这是代码。

var http  = require('http');
var url   = require('url');
var exec  = require('child_process').exec;
var fs    = require('fs');

var filepath = 'filenamegraph.png';

http.createServer(function(req,res){
    var urlstr = url.parse(req.url,true);
    var twit = exec("php -f twitter-scraper.php "+urlstr.query.term ,function(error, stdout, stderr){
        var graphstring = stdout;
        var stream = fs.createWriteStream("graph.txt");
        stream.once('open', function(fd){  
            stream.write(graphstring, function(){
                exec('dot -T png -o filenamegraph.png graph.txt', function(){
                    fs.stat(filepath,function(err,stat){
                        res.writeHead(200,{'Content-Type':'image/png', 'Content-Length': stat.size });
                        fs.readFile(filepath,function(err,file_conts){
                            res.write(file_conts);
                            res.end();
                        });
                    });
                });
            });
        });
    });
}).listen(1337);

所有这一切都是笨拙的多莉...

现在我称之为:

$.ajax({
    url: 'http://eavesdropper.dev:1337',
    data: { term : $.url.parse().params.term },
    success: function(data) {
        var res = $.parseJSON(data);
        console.log(res);
        $("body").append('<img src="filenamegraph.png" />');
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(jqXHR,'errror - ' + textStatus + " - " + errorThrown + ' ||');
    },
    complete: function(jqXHR, textStatus){
        console.log(jqXHR, textStatus)
    }
});

幕后的工作很好,但我明白了......

Object { readyState=0, status=0, statusText="error"} error - error - ||

不确定下一步是什么,因此非常感谢任何提示。

PS:直接在浏览器中运行脚本可以正确地处理图形,因此可以确定将数据返回给令人不安的 ajax 调用。

4

1 回答 1

1

您的服务器正在提供新创建的图形文件的内容,但您的客户端所做的只是尝试解析内容,就好像它是 JSON(它显然不是,导致您的错误消息),然后插入一个<img>元素将导致浏览器从提供原始 HTML 的任何服务器请求“filenamegraph.png”。

It looks to me like you don't need to do an AJAX request at all; just append <img src='http://eavesdropper.dev:1337/?your_params' /> and the browser will automatically get and display the generated image from your server.

于 2012-07-13T23:02:43.787 回答