firebase - 对谷歌服务的 HTTP 请求返回错误 : read ECONNRESET firebase cloud functions

标签 firebase firebase-realtime-database google-cloud-functions firebase-cloud-functions

我正在尝试使用 google translate api 将用户名从英语翻译成印度语,并使用云功能将数据存储回实时数据库。

此函数通过写入数据库调用,我使用 HTTP POST 请求向云翻译 api 发送请求,并将响应存储回数据库。我的翻译请求代码是这样的。

var translate_options = { method: 'POST',
                                  url: 'https://translation.googleapis.com/language/translate/v2',
                                  qs:
                                   { key: 'key goes here',
                                    },
                                    form: {
                                      q: fullData.name,
                                      target: "te"
                                    },
                                  };

                    request(translate_options, function (error, translate_response, translate_body) {
             if (error){
                          console.log("In translating, got an error");
                          console.log(error);
             }
             // Query to the database goes here.

  });

这段代码,如果在我的笔记本电脑上试过,会给出正确的翻译,但如果我将它部署为云函数,它会给我一个错误。非常具体

{ Error: read ECONNRESET
    at exports._errnoException (util.js:1020:11)
    at TLSWrap.onread (net.js:568:26) code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' }

我在使用 firebase blaze 计划,我可以向我的其他服务发送 POST 请求,但不能向 google 服务发送。

谁能帮我解决这个问题。提前致谢。

编辑:

完整代码为

var functions = require('firebase-functions');
var admin = require('firebase-admin');
var request = require("request");

admin.initializeApp(functions.config().firebase);


exports.whenUserIsAdded = functions.database.ref('users/{companyId}/{uid}').onCreate(event => {

var fullData = event.data.val();


var lang_code = {
  "bengali": "bn",
  "telugu": "te",
  "english": "en"
}

var lang_var = lang_code[fullData['edition']];


var translate_options = { method: 'POST',
              url: 'https://translation.googleapis.com/language/translate/v2',
              qs:
               { key: 'Key goes here',
                },
                form: {
                  q: fullData.name,
                  target: lang_var
                },
              };

request(translate_options, function (error, translate_response, translate_body) {
   var farmer_name = "";
   if(error){
        console.log("There is an error in translation");
        console.log(error);
   }
  translate_body = JSON.parse(translate_body);

  if(translate_body.data.translations){
    farmer_name = translate_body.data.translations[0].translatedText;
    console.log("The farmer name is " + fullData.name +"  :  " + farmer_name);
    // Code to write to the database;
  } else{
    console.log("The translation failed");
    farmer_name = fullData.name;
    console.log("The famrer name is  " + farmer_name);
  }

})

});

最佳答案

当函数的所有工作完成时,您不会返回已解决的 promise 。如果工作在过去完成,那可能只是意味着你很幸运。在不返回 promise 的情况下,Cloud Functions 可能会终止并清理函数返回时未完成的任何工作。正确返回 promise 将防止 Cloud Functions 在工作完成之前进行清理。

请考虑阅读我的 blog post about this .有专门针对 ECONNRESET 的部分。

关于firebase - 对谷歌服务的 HTTP 请求返回错误 : read ECONNRESET firebase cloud functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47531392/

相关文章:

firebase - 错误 : HTTP Error 400, 请求有错误。 Firebase Firestore 云函数

android - OneSignal:推送通知不起作用

firebase - firestore 中是否有像实时数据库中那样的 onDisconnect() 方法?

c# - 如何将 firebase 连接到基于 C# Windows 的应用程序

swift - 具有动态和固定单元格的 TableView Swift

google-app-engine - 如何在 Google Cloud Functions 和 Google App Engine 之间做出选择?

node.js - 使用 Firebase Cloud Functions 从外部 API 获取数据(超时)

node.js - 生成客户端 token 时出错(PayPal 和 Firebase 函数)

firebase - 跨多个区域部署 Firebase Cloud Functions

java - GCM 到 FCM - 在哪里添加服务器 key 并处理 MessageException