Как локально запустить мою серверную функцию cloudflare в процессе разработки? - PullRequest
0 голосов
/ 23 декабря 2018

Мне удалось развернуть мой первый работник cloudflare с использованием безсерверной инфраструктуры в соответствии с https://serverless.com/framework/docs/providers/cloudflare/guide/, и он работает, когда я попал в облако.

Во время разработки хотел бы иметь возможность проводить тестирование на http://localhost:8080/*

Какой самый простой способ вызвать локальный http-сервер и обработать мои запросы с помощью функции, указанной в serverless.yml?

Я изучил https://github.com/serverless/examples/tree/master/google-node-simple-http-endpoint, но естьсценарий "запуска" отсутствует.

Кажется, что нет примеров использования cloudflare на https://github.com/serverless/

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вы также можете выполнить локальное тестирование, загрузив работника Cloudflare в качестве сервисного работника.

Примечание:

  • Используйте локальный веб-сервер с https :.Рабочие не будут загружаться, используя файл: или http: протоколы.
  • Ваш браузер должен будет поддерживать рабочих, поэтому вы не можете использовать IE.Кв.

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
</head>

<body>
  <!-- Service worker registration -->
  <script>
    if ('serviceWorker' in navigator) {
      // Register the ServiceWorker
      navigator.serviceWorker.register('/service-worker.js')
        .then(
          function(reg) {
            // Registration succeeded
            console.log('[registerServiceWorker] Registration succeeded. Scope is ' + reg.scope)
            window.location.reload(true)
          })
        .catch(
          function(error) {
            // Registration failed
            console.log('[registerServiceWorker] Registration failed with ' + error)
          })
    } else {
      console.log('[registerServiceWorker] Service workers aren\'t supported')
    }
  </script>
</body>

</html>
0 голосов
/ 24 декабря 2018

В настоящее время нет способа запустить реальную среду Cloudflare Workers локально.Коллектив Workers знает, что разработчикам это необходимо, но для отделения основной среды исполнения Workers от остальной части программного стека Cloudflare, которая в противном случае слишком сложна для локального запуска, потребуется определенная работа.

В то же время существуютВместо этого вы можете попробовать несколько вариантов:

Сторонний эмулятор

Cloudworker - это эмулятор для Cloudflare Workers, который работает локально поверх node.js.Он был построен инженерами в Dollar Shave Club, компании, которая использует Workers, а не Cloudflare.Поскольку это полностью независимая реализация среды Workers, между ее поведением и «реальной вещью», скорее всего, будут небольшие различия.Тем не менее, этого достаточно, чтобы выполнить некоторую работу.

Предварительный просмотр API службы

Предварительный просмотр на cloudflareworkers.com доступен через API.С помощью некоторых команд curl вы можете загрузить свой код на cloudflareworkers.com и запустить его тестирование.Это не совсем «локально», но если вы все равно всегда подключены к Интернету, это почти одно и то же.Вам не нужны специальные учетные данные для использования этого API, поэтому вы можете написать несколько сценариев, которые используют его для запуска модульных тестов и т. Д.

Загрузите сценарий с именем worker.js, POST отправив его в https://cloudflareworkers.com/script:

SCRIPT_ID=$(curl -sX POST https://cloudflareworkers.com/script \
  -H "Content-Type: text/javascript" --data-binary @worker.js | \
  jq -r .id)

Теперь $SCRIPT_ID будет 32-значным шестнадцатеричным числом, идентифицирующим ваш сценарий.Обратите внимание, что идентификатор основан на хэше, поэтому, если вы дважды загрузите один и тот же сценарий, вы получите тот же идентификатор.

Далее создайте случайный идентификатор сеанса (32 шестнадцатеричных числа):

SESSION_ID=$(head -c 16 /dev/urandom | xxd -p)

Важно, чтобы этот идентификатор сеанса был криптографически случайным, потому что любой, у кого есть идентификатор, сможет подключить devtools к вашему предварительному просмотру и отладить его.

Давайте также определим две части конфигурации:

PREVIEW_HOST=example.com
HTTPS=1

Они указывают, что при запуске вашего работника предварительный просмотр должен действовать так, как если бы он работал на https://example.com.URL и заголовок Host входящих запросов будут переписаны с использованием этого протокола и имени хоста.Установите HTTPS=1, если URL-адрес должен быть HTTPS, или HTTPS=0, если нет.

Теперь вы можете отправить запрос вашему работнику, например:

curl https://00000000000000000000000000000000.cloudflareworkers.com \
  -H "Cookie: __ew_fiddle_preview=$SCRIPT_ID$SESSION_ID$HTTPS$PREVIEW_HOST"

(32 ноля могут бытьлюбые шестнадцатеричные цифры. При использовании предварительного просмотра в браузере они генерируются случайным образом, чтобы предотвратить вмешательство файлов cookie и кэшированного содержимого между сеансами. Однако при использовании curl это не имеет значения, поэтому все ноль - это хорошо.)

Вы можете изменить эту строку curl, чтобы включить путь в URL-адрес, использовать другой метод (например, -X POST), добавить заголовки и т. Д. Пока имя хоста и файл cookie совпадают, как показано, он будет идтик вашему рабочему предварительного просмотра.

Наконец, вы можете подключить консоль devtools для отладки в Chrome (в настоящее время работает только в Chrome):

google-chrome https://cloudflareworkers.com/devtools/inspector.html?wss=cloudflareworkers.com/inspect/$SESSION_ID&v8only=true

Обратите внимание, что приведенный выше API официально не задокументированв настоящее время и может измениться в будущем, но об изменениях должно быть относительно легко узнать, открыв cloudflareworkers.com в браузере и просмотрев запросы, которые он делает.

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