首页 > 解决方案 > Firebase 可调用函数不起作用

问题描述

这是我index.js文件的一部分:

const firebase = require("firebase");
const functions = require('firebase-functions');
// Firebase Setup
const admin = require('firebase-admin');
const serviceAccount = require('./service-account.json');
const cors = require('cors')({ origin: true });
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

exports.addMessage = functions.https.onCall((data, context) => {
    const sanitizedMessage = sanitizer.sanitizeText("test");
    return admin.database().ref('/messages').push({
        text: sanitizedMessage
    }).then(() => {
        console.log('New Message written');
        return { text: sanitizedMessage };
    })
});

此函数已成功上传到 Firebase。我正在尝试使用以下代码从我的网络客户端调用它:

var addMessage = firebase.functions().httpsCallable('addMessage');
addMessage({text: "test"}).then(function(result) {
    var sanitizedMessage = result.data.text;
    console.log(sanitizedMessage);
});

结果是带有以下描述的错误:

在此处输入图像描述

此外,Firebase 控制台中没有日志。但是,如果我直接访问该链接,我会收到一条日志消息。这意味着两件事:

  1. 我的函数的 URL 是由我的 Web 客户端正确构造的。
  2. 鉴于直接访问它会在 Firebase 控制台中生成日志,这意味着我的 Web 客户端甚至没有进行此调用。

我完全按照官方指南进行操作。

非常感谢任何调试帮助。

标签: javascriptnode.jsfirebasegoogle-cloud-functions

解决方案


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

exports.addMessage = functions.https.onCall((data, context) => {
    const sanitizedMessage = sanitizer.sanitizeText("test");
    return admin.database().ref('/messages').push({
        text: sanitizedMessage
    }).then(() => {
        console.log('New Message written');
        return { text: sanitizedMessage };
    })
});

推荐阅读