Проблема обработки множественных запросов сразу, когда casperjs работает внутри веб-сервиса - PullRequest
0 голосов
/ 24 декабря 2018

Итак, моя проблема в том, что когда я отправляю несколько запросов на мой wesbervice, использующий скребок casperjs (используя что-то вроде почтальона), он падает, когда я пытаюсь записать ответ обратно клиенту, потому что (я думаю) ответ закрывается отПервый запрос до второго запроса успевает завершиться.Вот сокращенная версия моего кода:

var server = require('webserver').create();
var fs = require('fs');
var utils = require('utils');
var adminLogin = JSON.parse(fs.read('./config.json'));
var casper = require('casper').create({
    pageSettings: {
        loadImages: true,
        userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0'
    },
    clientScripts:  [
        './node_modules/jquery/dist/jquery.min.js'
    ]
});

var ip_server = '127.0.0.1:3000';
var showMoreSelector = "a.button";

function step() {
     ...
}

var service = server.listen(ip_server, function (req, res) {
    var results;
    var parameters = req.url;
    var userID = parameters.substring(parameters.indexOf("?user=") + 6);

    casper.start('https://someurl.com')
    .then(function(){
         ...
    });
    casper.wait(2000, function() {
         ...
    })
    .thenOpen("https://someurl", function() {
         ...
    })
    .then(step)
    .then(function() {
         ...
    });

    casper.run(function() {

      //HERE is where the issue lies when sending multiple requests at once

      res.statusCode = 200;
      res.setHeader("Content-Type", "application/json");
      res.write(JSON.stringify(results));
      res.close();
    });
})

console.log('Server running at http://' + ip_server+'/');

И вот ошибка, которую я получаю, когда второй запрос пытается завершиться:

Error: cannot access member `statusCode' of deleted QObject

Так что в основном мой вопрос, как я могусделать что-то вроде: оставить ответ открытым, пока все запросы не будут выполнены?Или есть лучший способ справиться с этим?

...