HTTP-запрос к службе Google возвращает ошибку: прочитайте функции ECONNRESET firebase cloud
Я пытаюсь перевести имя пользователя с английского на индийский язык, используя 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);
}
})
});
1 ответ
Вы не возвращаете обещание, которое будет выполнено, когда вся работа вашей функции будет завершена. Если работа завершалась в прошлом, это, возможно, означает, что вам повезло. Без возврата обещания облачные функции могут завершить и очистить любую работу, которая не была завершена, когда функция вернется. Правильный возврат обещания предотвратит очистку облачных функций перед выполнением работы.
Пожалуйста, подумайте о том, чтобы прочитать мой пост в блоге. Специально для ECONNRESET есть раздел.