我使用PhantomJS在NodeJS中截取屏幕截图,但它无法处理来自用户的多个请求。问题是当多个用户同时发送请求时,他们会得到相同的结果。
这是我使用的代码:
var http = require('http');
var phantom = require('phantom');
var url, img;
http.createServer(function(req, res) {
res.setHeader('Content-Type', 'text/html; charset=utf-8');
res.writeHeader(200, { "Content-Type": "text/html" });
url = req.url;
url = url.replace('/', '');
url = url.trim();
if (!(url == 'favicon.ico')) {
console.log(url);
phantom.create().then(function(ph) {
ph.createPage().then(function(page) {
page.property('viewportSize', { width: 1024, height: 768 }).then(function() {
page.open('http://' + url + '/').then(function(status) {
console.log(status);
page.property('onLoadFinished').then(function() {
if (!(status == 'success')) {
res.write('<html><body><h2>' + status + ' : ' + url + ' is not correct url!</h2></body></html>');
res.end();
page.close();
} else {
setTimeout(function() {
page.renderBase64('jpeg').then(function(img) {
res.write('<html><body><img src="data:image/jpeg;base64,' + img + '"/></body></html>');
res.end();
page.close();
});
}, 4000);
}
});
});
});
});
});
}
}).listen(80, '127.0.0.1');
console.log('Server running at http://127.0.0.1:80/');
答案 0 :(得分:3)
您已在var url, img;
请求范围之外定义http
,这意味着他们会被不同的请求共享(一个请求可能会更改它,而前一个请求仍在处理它),这可能是造成这个问题的原因。在请求处理程序中移动这些声明:
// var url, img; // << move this
http.createServer(function(req, res) {
var url, img; // << here
res.setHeader('Content-Type', 'text/html; charset=utf-8');
res.writeHeader(200, { "Content-Type": "text/html" });