node.js - 函数执行耗时 60012 毫秒,完成状态为:'timeout'
问题描述
问题摘要:我想从我的 Firebase Cloud Function 向我的 node.js 后端触发一个 POST 请求,该后端当前在我的本地计算机上运行。函数执行开始,但 POST 调用永远不会到达后端。
开发环境:
- Firebase 实时数据库:Blaze 计划。DB 中的新条目会触发 Cloud Function。
- Firebase 云功能:axios 0.19.2、firebase-admin 8.10.0、firebase-functions 3.6.1。
- 后端:节点 v12.14.1,http://XXX.XXX.X.XX:3000
预期结果:来自 Firebase Cloud Function 的 POST 调用触发 node.js 后端中的路由以处理 POST 调用中接收到的数据。
实际结果:POST 调用永远不会到达当前在本地计算机上运行的 node.js 后端。登录 Firebase Cloud Functions 控制台:
函数执行耗时 60012 毫秒,完成状态为:'timeout'
到目前为止我尝试了什么?
- 来自 POSTMAN 的 POST 调用可以毫无问题地到达我的后端。
- 用 request-promise-native 替换 axios 以进行 POST 调用。
- 将http://XXX.XXX.X.XX:3000替换为http://localhost:3000。
- 使用 axios 的 .then().catch() 语法。
- 使用带有 try & catch 结构的 async await 语法。
Firebase 云功能代码:
const functions = require('firebase-functions');
const axios = require('axios');
const admin = require('firebase-admin');
admin.initializeApp();
const BACKEND_URL = 'http://XXX.XXX.X.XX:3000';
exports.triggerNotification = functions.database.ref('/sessions/{sessionID}/{message}')
.onCreate(function(snapshot, context) {
const createdContent = snapshot.val();
const config = { headers: { 'Content-Type': 'application/json' } };
if (!createdContent) {
return;
}
return axios.post(`${BACKEND_URL}/notification/trigger`, { createdContent } ,config);
});
Node.js 后端代码:
router.post('/trigger', function (req, res) {
console.log('req.body', req.body);
res.status(200).send('Post request received');
});
解决方案
看起来您正在使用 IP 地址,并且后端正在本地计算机上运行,因为您尝试了 localhost 并且它的格式与您的代码中的格式类似。你说邮递员工作,但你是从网络外部尝试吗?我的猜测是连接被阻塞了。您可以尝试像 ngrok 这样公开本地服务器的服务吗?还要确保使用 https 进行尝试
推荐阅读
- html - 使多个元素悬停
- discord.py - 我正在尝试编写一个不和谐的音乐机器人并遇到了这个问题
- javascript - 仅将鼠标按下时的元素附加到特定的 div 元素中
- icalendar - 我无法弄清楚这是什么日期格式
- python - 尝试创建一个在调用类和 def 后进入循环的类
- javascript - 如何使用纯 JavaScript 将表格行拖放到选择字段?
- javascript - 我怎样才能做到这一点,以便用户在我的功能期间的任何时候都可以键入“reset”并将它们带回我的功能的开头?
- regex - 如何在 Kotlin 的替换函数中将函数作为参数传递?
- android - LazyColumn 中的 Jetpack Compose 常规项目
- javascript - 使用管道和地图创建过滤器