Ответ вызываемых функций Firebase не работает - PullRequest
0 голосов
/ 11 июня 2019

У меня есть простая настройка скрипта функций firebase (под управлением firebase-admin версии 8.0 и firebase-functions версии 2.3.1):

const functions = require('firebase-functions');
const cors = require('cors')({
    origin: true,
});

//Gets and returns a user's ip address
exports.getIPAddress = functions.https.onRequest((req, res) => {
    let ipAddress = req.headers['fastly-client-ip'] || req.connection.remoteAddress;
    ipAddress = ipAddress.toString();
    console.log('Fetched IP Address: ' + ipAddress);
    return cors(req, res, () => {
        res.status(200).send(ipAddress);
    });
});

Цель функции - просто вернуться к IP-адресу пользователя. Он прекрасно регистрируется в консоли функций, без ошибок.

Вот код клиента:

var getIPAddress = mainFirebase.functions().httpsCallable('getIPAddress');
function testIP() {
    getIPAddress().then(function(result) {
        console.log(result.data.text)
    });
}

Однако консоль говорит, что 'result' не является допустимым объектом JSON.

Я пытался использовать https.onCall, который порекомендовал кто-то другой в Интернете, однако консоль говорит, что функция не существует.

Любая помощь в получении правильного ответа будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Для вызываемых функций. Вам нужно создать такую ​​функцию, как:

exports.addMessage = functions.https.onCall(
  async (data, context) => {
    // context contains the user info.
  }
);

И на вашем интерфейсе вы можете называть их как:

firebase.functions().httpsCallable('addMessage');
addMessage({text: messageText}).then(function(result) {
  // Read result of the Cloud Function.
  var sanitizedMessage = result.data.text;
}).catch(function(error) {
  // Getting the Error details.
  var code = error.code;
  var message = error.message;
  var details = error.details;
  // ...
});

Когда вы звоните по https. Вы также можете использовать SDK для вызова методов https. Но убедитесь, что вы работаете с CORS на вашем сервере.

У вашего клиента. Просто используйте http-клиент.

метод this.http.post с функцией url.

0 голосов
/ 11 июня 2019

Ваша функция является обычной функцией типа HTTP. Однако ваш клиентский код пытается вызвать его так, как если бы это была функция вызываемого типа. Это не сработает. Если вы хотите вызвать функцию вызываемого типа, вам придется реализовать функцию в соответствии с документацией .

Если вам нужно сохранить функцию как функцию типа HTTP, вы не можете использовать клиентский SDK Firebase для ее вызова. Просто вызовите его, как если бы это был любой другой тип конечной точки HTTP .

...