Вызов HTTPS POST API из функций Firebase - получение ошибки ENOTFOUND - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь вызвать внешний API POST из своей функции firebase, но он работает не так, как ожидалось. Я вызываю функцию firebase из своего приложения android. Ниже приведены фрагменты кода для моей функции, вызова android и ошибки, которую я получаю в консоли firebase:

Функция Firebase:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const https = require('https');
admin.initializeApp(functions.config().firebase);

exports.generateToken = functions.https.onCall((data, context) => {
    const variable = data.variable;
    const uid = context.auth.uid;
    console.log("Function Trigerred");

    if(uid !== null) {
        console.log("UID: " + uid);

        const requestPayload = JSON.stringify({
            "variable": variable
        });

        console.log(requestPayload);

        const config = {
            hostname: 'API-HOST',
            port: 443,
            path: '/API-PATH',
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            }
        };

        console.log(config);

        const response = "";

        const req = https.request(config, (res) => {
            res.on('data', (data) => {
                console.log(data);
                res.send(data);
            });
        });

        req.on('error', (error) => {
            console.log(error);
            res.end(error);
        });

        req.write(requestPayload);
        req.end();
    } else {
        console.log("Invalid User");
        res.send("Invalid User");
    }
});

Звонок в приложении

Map<String, Object> data = new HashMap<>();
data.put("variable", "value");
FirebaseFunctions.getInstance()
        .getHttpsCallable("generateToken")
        .call(data)
        .continueWith(task -> {
            String result = (String) task.getResult().getData();
            Log.e("1: ", result);
            return result;
        })
        .addOnCompleteListener(task -> {
            Log.e("2: ", "Complete");
            if (!task.isSuccessful()) {
                Exception e = task.getException();
                if (e instanceof FirebaseFunctionsException) {
                    FirebaseFunctionsException ffe = (FirebaseFunctionsException) e;
                    FirebaseFunctionsException.Code code = ffe.getCode();
                    Object details = ffe.getDetails();
                }
                Log.e("3: ", task.getException().toString());
            }
        });

Журнал консоли Firebase

{
  Error: getaddrinfo ENOTFOUND API-HOST API-HOST:443 at GetAddrInfoReqWrap.onlookup [as oncomplete (dns.js:67:26)
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'API-HOST',
  host: 'API-HOST',
  port: 443
}

Однако, когда я попытался использовать этот API из Postman, я получил успешный ответ.

Я новичок в Node.js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...