У меня есть сервер узлов ZombieJS на Heroku, который отказывается от данных из Интернета. Код сервера вызывается из цикла for
на стороне клиента. Каждая итерация цикла делает вызов сервера, который делает царапину зомби. Иногда сервер вылетает с ошибкой ниже. Это происходит только в случае, когда существует несколько итераций цикла for
.ZombieJS: прерывисто сбой при вызове многократно из цикла for
Как сделать код достаточно прочным, чтобы обрабатывать несколько одновременных клиентских вызовов, каждый из которых имеет цикл for
.
Код:
var express = require('express');
var app = express();
var Browser = require('zombie'); // tried changing var to const; no difference
var assert = require('assert');
app.set('port', (process.env.PORT || 5000));
var printMessage = function() { console.log("Node app running on " + app.get('port')); };
var getAbc = function(response, input)
{
var browser = new Browser();
browser.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0';
browser.runScripts = true;
var url = "http://www.google.com/ncr";
browser.visit(url, function() {
browser.fill('q', input).pressButton('Google Search', function(){
// parsing number of results from browser object
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end(numberOfSearchResults);
});
});
}
var handleXyz = function(request, response)
{
getAbc(response, request.query.input);
}
app.listen(app.get('port'), printMessage);
app.post('/xyz', handleXyz);
Ошибка:
assert.js:86
throw new assert.AssertionError({
^
No open window with an HTML document
at Browser.field (/app/node_modules/zombie/lib/index.js:811:7)
at Browser.fill (/app/node_modules/zombie/lib/index.js:903:24)
at /app/cfv1.js:42:11
at done (/app/node_modules/zombie/lib/eventloop.js:589:9)
at timeout (/app/node_modules/zombie/lib/eventloop.js:594:33)
at Timer.listOnTimeout (timers.js:119:15)
У меня есть аналогичный проект с использованием HorsemanJS/PhantomJS, который терпит неудачу подобным образом (я застрял на том, что тоже!): NodeJS server can't handle multiple users
Я провел быстрый тест и, похоже, все в порядке. Можете ли вы добавить browser.debug() и посмотреть, сможете ли вы получить больше информации из своих журналов? –
Вы неоднократно вызывали его из цикла 'for'? Иногда это терпит неудачу. – user3320795
Где бы я положил 'browser.debug()'? – user3320795