函数执行耗时60012毫秒,状态为:“超时”

时间:2020-05-26 10:27:42

标签: node.js firebase-realtime-database axios google-cloud-functions

问题摘要:我想从Firebase Cloud Function向当前在本地计算机上运行的node.js后端触发POST请求。函数开始执行,但是POST调用永远不会到达后端。

开发环境:

  • Firebase Realtime DB:Blaze计划。数据库中的新条目将触发云功能。
  • Firebase Cloud功能:axios 0.19.2,firebase-admin 8.10.0,firebase功能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毫秒,状态为:“超时”

到目前为止我尝试了什么?

  • 来自POSTMAN的POST呼叫顺利到达我的后端。
  • 用request-promise-native代替axios进行POST调用。
  • http://XXX.XXX.X.XX:3000代替http://localhost:3000
  • 使用axios的.then()。catch()语法。
  • 使用带有try&catch结构的axios异步等待语法。

Firebase Cloud功能代码:

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');
}); 

1 个答案:

答案 0 :(得分:2)

自从您尝试使用localhost以来,您似乎正在使用IP地址,并且后端正在本地计算机上运行,​​并且其格式如代码中所示。您说邮递员行得通,但是您是在网络外部尝试邮递员吗?我的猜测是该连接已被阻塞。您可以尝试使用像ngrok这样的公开本地服务器的服务吗?另外,请确保尝试使用https