为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米脂 2023-05-25 18:06:40
我的目标是如果用户通过身份验证并且输入的长度小于 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;  })});
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

可调用函数不应该只返回任何承诺。他们应该返回一个承诺,该承诺通过发送给客户端的响应来解决。你的返回一个在数据库操作完成时解析的承诺。请注意,add()返回一个 DocumentReference 对象。nodejs 无法序列化此对象,因为它包含自引用链接。您需要准确决定客户应该收到什么。

您可以通过返回更具体的内容在短期内解决此问题:


return admin.firestore().collection("requests").add({

    text :data.text,

    upVote : 0

})

.then(() => {

    return { result: "OK" }

})

但最终,您将需要定义和实施客户需要接收的内容。


查看完整回答
反对 回复 2023-05-25
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信