firebase 功能内部服务器和最大 sta

我的目标是如果用户通过身份验证并且输入的长度小于 30,则从用户那里获取输入并将其存储到基础中,然后清除输入并关闭表单。它在后端存储数据,但也会抛出此错误。


这是 firebase 日志中的错误


Unhandled error RangeError: Maximum call stack size exceeded

    at Object (native)

    at /srv/node_modules/lodash/lodash.js:4919:24

    at baseForOwn (/srv/node_modules/lodash/lodash.js:2990:24)

    at Function.mapValues (/srv/node_modules/lodash/lodash.js:13426:7)

    at encode (/srv/node_modules/firebase-functions/lib/providers/https.js:184:18)

    at /srv/node_modules/lodash/lodash.js:13427:38

    at /srv/node_modules/lodash/lodash.js:4925:15

    at baseForOwn (/srv/node_modules/lodash/lodash.js:2990:24)

    at Function.mapValues (/srv/node_modules/lodash/lodash.js:13426:7)

    at encode (/srv/node_modules/firebase-functions/lib/providers/https.js:184:18)

完成状态码 500


这是它在浏览器中显示的错误


Error: INTERNAL

    at new g (error.ts:66)

    at b (error.ts:175)

    at A.<anonymous> (service.ts:263)

    at tslib.es6.js:100

    at Object.next (tslib.es6.js:81)

    at r (tslib.es6.js:71)

这是 html 的代码:


<!-- new request modal -->

  <div class="new-request">

    <div class="modal">

      <h2>Request a Tutorial</h2>

      <form method="GET" action="#">

        <input type="text" name="request" placeholder="Request...">

        <button type="submit">Submit Request</button>

        <p class="error"></p>

      </form>

    </div>

  </div>

这是给 JS 事件监听器的


// Add a new request 

requestForm.addEventListener("submit",(e) => {

  e.preventDefault();

  

  const addRequest = firebase.functions().httpsCallable("addRequest");

  addRequest({

    text : requestForm['request'].value

  }).then(() => {

    requestForm.reset();

    requestModal.classList.remove("open");

    requestForm.querySelector(".error").textContent = "";


  }).catch((err) => {

    console.log(err);

    requestForm.querySelector(".error").textContent = err.message;

  })


});



米脂
浏览 124回答 1
1回答

潇湘沐

可调用函数不应该只返回任何承诺。他们应该返回一个承诺,该承诺通过发送给客户端的响应来解决。你的返回一个在数据库操作完成时解析的承诺。请注意,add()返回一个 DocumentReference 对象。nodejs 无法序列化此对象,因为它包含自引用链接。您需要准确决定客户应该收到什么。您可以通过返回更具体的内容在短期内解决此问题:return admin.firestore().collection("requests").add({    text :data.text,    upVote : 0}).then(() => {    return { result: "OK" }})但最终,您将需要定义和实施客户需要接收的内容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript