运行 firebase 云函数失败并出现 SyntaxError

分享于2022年07月17日 firebase google-cloud-functions node.js 问答
【问题标题】:运行 firebase 云函数失败并出现 SyntaxError(Running firebase cloud function fails with a SyntaxError)
【发布时间】:2022-01-26 10:46:12
【问题描述】:

我正在遵循 link 中提供的所有步骤,但它似乎没有将我发送到任何地方,因此我在这里寻求帮助。我有一个示例函数,我想先对其进行测试,然后部署到 Firebase 云函数,但它失败并显示以下消息:

HTTP/1.1 400 错误请求 x-powered-by: Express content-security-policy: default-src 'none' x-content-type-options: nosniff 内容类型:文本/html; charset=utf-8 内容长度:1295 日期:2021 年 12 月 27 日星期一 13:05:48 GMT 连接:关闭

错误
SyntaxError: Unexpected token ' in JSON at
位置 0
  在 JSON.parse ()
在 createStrictSyntaxError (C:\Users\janic\AppData\Roaming\npm\node_modules\firebase-tools\node_modules\body-parser\lib\types\json.js:158:10)
解析时 (C:\Users\janic\AppData\Roaming\npm\node_modules\firebase-tools\node_modules\body-parser\lib\types\json.js:83:15)
在 C:\Users\janic\AppData\Roaming\npm\node_modules\firebase-tools\node_modules\body-parser\lib\read.js:121:18
在调用回调 (C:\Users\janic\AppData\Roaming\npm\node_modules\firebase-tools\node_modules\raw-body\index.js:224:16)
完成时 (C:\Users\janic\AppData\Roaming\npm\node_modules\firebase-tools\node_modules\raw-body\index.js:213:7)
在 IncomingMessage.onEnd (C:\Users\janic\AppData\Roaming\npm\node_modules\firebase-tools\node_modules\raw-body\index.js:273:7)
在 IncomingMessage.emit (节点:事件:402:35)
在 endReadableNT(节点:内部/流/可读:1343:12)
在 processTicksAndRejections (node:internal/process/task_queues:83:21)

我在代码中没有任何语法错误,我从链接中复制了代码。

// functions/index.js
const functions = require('firebase-functions');
const faker = require('faker');

// Initialize products array
const products = [];

// Max number of products
const LIMIT = 100;

// Push a new product to the array
for (let i = 0; i < LIMIT; i++) {
   products.push({
      name: faker.commerce.productName(),
      price: faker.commerce.price(),
   });
}

exports.listProducts = functions.https.onCall((data, context) => {
   return products;
});

我使用以下命令从控制台调用它:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"data":{}}' http://localhost:5001/bleconnect/us-central1/listProducts

编辑:

该错误表明解析有问题,但是,即使尝试返回一个简单的字符串“Test”,它仍然会抛出相同的错误。

  • 在测试功能的时候,建议也试试测试工具: gcloud functions call ,或者控制台的测试标签。

【解决方案1】:

返回的数据很可能已经被解析,根本不是 JSON,或者是一个错误地字符串化的 JSON 字符串。

  • 这就是错误消息所假设的,但并不一定是这个意思。我试图只返回一个字符串“Test”,但它抛出了完全相同的错误。
  • 是的,因为只是“测试”也不是正确的 JSON。您必须按照“{"test":true}" 的方式返回一些内容。
  • @showtime 这个答案对你有帮助吗?如果它对您有帮助,您可以点赞或接受它以帮助社区吗?谢谢。