我有一个简单的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,Internet上的其他人推荐使用该命令,但是控制台说该功能不存在。
任何帮助使响应正常工作的帮助将不胜感激!
答案 0 :(得分:0)
您的函数是常规的HTTP类型函数。但是,您的客户端代码试图像调用可调用类型函数一样对其进行调用。那是行不通的。如果要调用可调用类型的函数,则必须实现函数according to the documentation。
如果需要将该函数保留为HTTP类型函数,则不能使用Firebase客户端SDK调用它。只是invoke it as if it were any other type of HTTP endpoint。
答案 1 :(得分:0)
用于可调用函数。您需要创建一个类似于
的函数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。