Функции Google Cloud — Локальный эмулятор не принимает параметры

#google-cloud-functions

#google-cloud-функции

Вопрос:

У меня есть очень простая функция HTTP:

 exports.reporting = functions.https.onRequest(async (req,res) => {
    cors(req, res, () => {
        const text = req.query.text;
        console.log(text);
        return res.send(`Test Completed`);
    });
});
 

Когда я вызываю: curl "http://localhost:5001/<project-id>/us-central1/reporting"

Все работает нормально:

 StatusCode        : 200
StatusDescription : OK
Content           : Test Completed
RawContent        : HTTP/1.1 200 OK
                    vary: Origin
                    connection: close
                    Content-Length: 14
                    Content-Type: text/html; charset=utf-8
                    Date: Wed, 20 Jan 2021 06:51:07 GMT
                    ETag: W/"e-NPX2Kiy1JwL0pK33NZe7NuviU84"
                    X-Powered-By...
Forms             : {}
Headers           : {[vary, Origin], [connection, close], [Content-Length, 14], [Content-Type, text/html;
                    charset=utf-8]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 14
 

Но когда я звоню: curl "http://localhost:5001/<project-id>/us-central1/reporting?text=abc123"

Я получаю сообщение об ошибке:

 curl : The remote server returned an error: (400) Bad Request.
At line:1 char:1
  curl "http://localhost:5001/<project-id>/us-central1/reporting?text=abc123"
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc
   eption
      FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
 

В журнале эмулятора указано время ожидания функции?

 i  functions: Beginning execution of "reporting"
!  functions: Your function timed out after ~60s. To configure this timeout, see
      https://firebase.google.com/docs/functions/manage-functions#set_timeout_and_memory_allocation.
>  C:UsersUserAppDataRoamingnpmnode_modulesfirebase-toolslibemulatorfunctionsEmulatorRuntime.js:640
>              throw new Error("Function timed out.");
>              ^
>
>  Error: Function timed out.
>      at Timeout.setTimeout [as _onTimeout] (C:UsersUserAppDataRoamingnpmnode_modulesfirebase-toolslibemulatorfunctionsEmulatorRuntime.js:640:19)
>      at ontimeout (timers.js:436:11)
>      at tryOnTimeout (timers.js:300:5)
>      at listOnTimeout (timers.js:263:5)
>      at Timer.processTimers (timers.js:223:10)
 

Стоит отметить, что развернутая функция отлично работает с параметрами.

Комментарии:

1. Не могли бы вы попробовать протестировать свою команду curl следующим образом: curl "http://localhost:5001/<project-id>/us-central1/reporting/?text=abc123" . Это известная проблема , зависящая от версии используемого вами эмулятора. Дайте мне знать, если это поможет.

2. Вау, это сработало. В Windows firebase-инструменты 9.2.1

3. Я рад, что мой комментарий помог вам. Публикую ответ для сообщества.

Ответ №1:

При тестировании функций Firebase, которые используют строку запроса в URL-адресе эмулятора с помощью инструмента curl, не забудьте добавить косую черту ‘/’ перед строкой запроса (обозначается символом вопросительного знака ‘?’) аналогично: http://localhost:5001/<project-id>/us-central1/reporting/?text=abc123 .