Запуск кукловода в облаке и передача его в JS - PullRequest
0 голосов
/ 12 ноября 2018

Я управляю сценарием кукловода на Heroku. У меня отсортированы buildpacks, и он работает нормально. В конце концов я намереваюсь перенести это на свой собственный сервер и запустить 5-минутный цикл. Моя проблема заключается в том, что время ожидания истекло (H12 на Heroku требует более 30000 мс для отправки любых данных обратно на сервер). Теперь я решил попробовать запустить кукловода на серверной части, а затем вернуть JSON, который передается интерфейсному JS и используется для формирования конечной веб-страницы.

Моя проблема заключается в следующем. Я не могу использовать оператор require в моем интерфейсном JS, поскольку это предостережение для узла, а не для "веб" JS. Я не могу использовать Browserify на нем, так как Browserify, естественно, не поддерживает кукловод, и я не могу включить кукловода в файл экспресс-маршрутизации, так как это поместит скрипт кукловода во внешний интерфейс, что, как указывалось ранее, вызывает тайм-аут И не позволит мне изменить внешний вид HTML.


Базовая структура желаемых функций:

Call made to localhost:PORT/puppet
Puppet script invoked
Puppet script checks if pages are up/scrapes data/does automated testing etc
Script returns a JSON which is then saved to a variable
Express serves HTML file with script and css
Script uses returned JSON to dictate page structure/style/classes

Структура файла:

puppet.js (puppeteer script)
server.js (handles routes and express)
index.html (served by server.js)
master.css
package.json
package-lock.json

Узловые модули:

colors
express
puppeteer

Я потратил хорошие 4-5 дней на это, любая помощь очень ценится

РЕДАКТИРОВАТЬ: Для пояснения мне нужен способ передачи JSON из сценария кукловода на стороне сервера в javascript, который использует html, обслуживаемый Express, чтобы я мог использовать значения в JSON для изменения веб-страницы. То есть, если JSON был (a: true, b: false), я бы дал div # a класс .success и div # b класс .warn

РЕДАКТИРОВАТЬ 2: Новая проблема, нельзя использовать выборку на локальном хосте. Я установил API, но не могу получить его. Каждое решение приносит новую проблему, или так кажется

1 Ответ

0 голосов
/ 15 ноября 2018

Ну, вы не можете увеличить время ожидания для Heroku, поэтому, если вы действительно хотите запустить сценарий кукловода из запроса, вам нужно сделать что-то вроде этого:

  1. отправить статус 200
  2. Запустите сценарий кукловода
  3. Сохраните результат .JSON в БД (поскольку вы больше не можете выполнять res.send ())
  4. Получите результаты из БД в вашемFront-End (поэтому, возможно, запрашивайте его каждые X секунд, чтобы увидеть, есть ли ваши результаты.)
  5. Получите нужный HTML, CSS и т. Д., Теперь вам не нужно ждать завершения сценария кукловода.

Это не особенно элегантно, но запрос, занимающий более 30 секунд, является особым случаем.

Вы можете отправить идентификатор вместе с кодом состояния 200 на шаге 1, который вы можетезатем используйте для запроса к БД на шаге 4.


Кроме того, вы, вероятно, знаете это, но вы можете использовать что-то вроде heroku-scheduler или пакета npm node-schedule , чтобы сделатьваш сценарий кукловода запускается каждые X минут, но этоУльд также подразумевает сохранение результатов в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...