从“ firebase服务”提供的HTTP函数因“错误:SUPERVISOR clientError”而永久挂起

时间:2018-08-14 04:40:11

标签: node.js firebase google-cloud-functions

我打开了一个旧的Firebase项目,以将其功能更新为新的v2格式。没什么大不了的。当我这样做时,我清除了所有的节点和npm内容,并用nvm重新安装了它们,因为Firebase对它们支持的确切节点版本非常挑剔。同样,没什么大不了的。

但是,现在,每当我针对firebase serve --only functions所提供的云功能执行HTTP请求时,都会收到类似这样的疯狂错误消息(并且请求永不终止):

2018-08-14T03:45:56.195Z - error: SUPERVISOR clientError { Error: Parse Error
    at Error (native) bytesParsed: 1, code: 'HPE_INVALID_METHOD' } connecting=false, _hadError=false, bytesRead=147, , fd=14, reading=true, $ref=$, onread=function onread(nread, buffer) {
  var handle = this;
  var self = handle.owner;
  assert(handle === self._handle, 'handle != self._handle');

  self._unrefTimer();

  debug('onread', nread);
[...]

我从~/.nvm/versions/node/v6.11.5/lib/node_modules/firebase-tools/node_modules/@google-cloud/functions-emulator/logs/cloud-functions-emulator.log撤消了

屏幕上的错误确实令人迷惑;它无缘无故地转储了整个文件(或者至少是onread函数): screenshot of error message

这使我整夜疯狂,在还原所有更改并返回到昨天的代码后,我仍然收到错误消息。

有人曾见过吗?你知道如何解决吗?

2 个答案:

答案 0 :(得分:6)

如果您尝试通过https而不是http访问模拟的云功能,也会出现(非常无用)错误消息。如果您随处都安装了HTTPS之类的浏览器附加组件,则可能会无意间发生这种情况。

答案 1 :(得分:0)

经过一夜安眠并精神焕发,我发现我在curl命令中键入了“ -H”错误,而是键入了“ -X”,并将标头作为HTTP方法发送。

原是:

curl -v -X "Authorization: Bearer $token" http://localhost:5000/...

应该是:

curl -v -H "Authorization: Bearer $token" http://localhost:5000/...

所以error: SUPERVISOR clientError { Error: Parse Error at Error (native) bytesParsed: 1, code: 'HPE_INVALID_METHOD' }没错,只是超级无益。

有人知道哪个包装来自吗?我将提交一个更好的错误,该错误至少会打印出所收到的方法。昨晚可以节省我几个小时的时间。