#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
.