我的目标是如果用户通过身份验证并且输入的长度小于 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" }
})
但最终,您将需要定义和实施客户需要接收的内容。
添加回答
举报
0/150
提交
取消