2014-06-06 57 views
0

我已经编写了一个node.js服务器,该服务器创建一个服务器并在完成异步功能时打印输出。虽然我能够在console.log中始终获得正确的输出。这同样没有反映在我的回应中。这里是我的代码片段: -节点js在第二个或第三个调用上工作

var request = require('request'); 
var http = require('http'); 
var cheerio = require('cheerio'); 
var url = require('url'); 
var Curl = require('node-libcurl').Curl; 
var sleep = require('sleep'); 
isDone = 0; 
globalImage = ""; 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    var url_parts = url.parse(req.url, true); 
    var query = url_parts.query; 
    var main_url = query["link"]; 
    if (req.url != '/favicon.ico') { 
    res.writeHead(200); 

    if(main_url != undefined){ 
     var position = parseInt(query["position"]); 
    // web_scrap() 
    web_scrap(main_url,position, function(image) { 

     console.log("Console log : " + image); 
     globalImage = image; 

    }); 
    res.write(globalImage); 
    res.end("HEY"); 
    } 
    } 
    else {//For favicon and other requests just write 404s 
     res.writeHead(404); 
     res.write('This URL does nothing interesting'); 
     res.end(); 
    } 
}).listen(3000, '127.0.0.1'); 
console.log('Server running at http://127.0.0.1:3000/'); 


function web_scrap(url, position, callback){ 
    // do something 
    callback(JSON.stringify(product)); 
} 

现在就启动服务器,并与参数的链接和位置访问它在浏览器得到的,我在第二次或第三次刷新获得输出。尽管我在console.log中获得了完美的输出结果!

任何人都可以在这方面帮助或指导我吗?

谢谢!

+0

你尝试添加一个'res.writeHead(200,{'Connection':'Keep-Alive'});'? –

+0

我现在试过了。仍然没有工作:( –

+0

哼,我想这是由'web_scrap'中的一个异步调用引起的,它使得你的res.end函数在调用之前,尝试移动'res.write(globalImage); res.end(“HEY” );'在你的回调函数中。 –

回答

2

据我所知,你是从外部来源异步加载图像。

因此,即使装载尚未完成,您的函数仍会继续运行。由于您的globalImage是一个全局变量,因此一旦它被加载,它就会保留在内存中,这就是为什么在尝试之后获取数据的原因。

只需在回调函数中移动res.write和res.end,这样内容将在图像加载后发送。

web_scrap(main_url,position, function(image) { 
    console.log("Console log : " + image); 
    globalImage = image; 
    res.write(globalImage); 
    res.end("HEY"); 
}); 

无论如何,如果你希望缓存你的映像,除非,你不应该有一个globalImage变量,因为它会留在记忆即使你希望它被垃圾收集。你可以删除变量,只是做到这一点:

web_scrap(main_url,position, function(image) { 
    console.log("Console log : " + image); 
    res.write(image); 
    res.end("HEY"); 
}); 
相关问题