我一直在firebase functions:shell
尝试新的firebase可调用云功能我一直在跟踪错误
请求内容类型不正确。
和
从功能收到回复:400,{“错误”:{“状态”:“INVALID_ARGUMENT”,“消息”:“错误请求”}}
这是浩 我试图在shell上调用这个函数
myFunc.post(dataObject时)
我也试过这个
myFunc.post()。表(dataObject时)
然后我得到错误的编码(表单)错误。 dataObject
是有效的JSON。
更新
我认为我需要使用firebase serve
来对这些callable https
函数进行本地仿真。数据需要像这样在post请求中传递(注意它是如何嵌套在data
参数中)
{
"data":{
"applicantId": "XycWNYxqGOhL94ocBl9eWQ6wxHn2",
"openingId": "-L8kYvb_jza8bPNVENRN"
}
}
我无法想象的是如何在通过REST客户端调用该函数时传递虚拟身份验证信息
答案 0 :(得分:12)
我设法让它在函数shell中运行它:
myFunc.post('').json({"message": "Hello!"})
答案 1 :(得分:2)
据我所知,该函数的 second 参数包含所有其他数据。传递包含headers
映射的对象,您应该可以指定所需的任何内容。
myFunc.post("", { headers: { "authorization": "Bearer ..." } });
如果您使用Express来处理路由,那么它看起来就像:
myApp.post("/my-endpoint", { headers: { "authorization": "Bearer ..." } });
答案 2 :(得分:1)
如果您查看source code,您可以看到它只是一个普通的https发布功能。如果身份验证标头包含json网络令牌,我建议您使用unit test api for https functions并模拟头方法以从测试用户和请求主体返回令牌
[更新] 示例
const firebase = require("firebase");
var config = {
your config
};
firebase.initializeApp(config);
const test = require("firebase-functions-test")(
{
your config
},
"your access token"
);
const admin = require("firebase-admin");
const chai = require("chai");
const sinon = require("sinon");
const email = "test@test.test";
const password = "password";
let myFunctions = require("your function file");
firebase
.auth()
.signInWithEmailAndPassword(email, password)
.then(user => user.getIdToken())
.then(token => {
const req = {
body: { data: { your:"data"} },
method: "POST",
contentType: "application/json",
header: name =>
name === "Authorization"
? `Bearer ${token}`
: name === "Content-Type" ? "application/json" : null,
headers: { origin: "" }
};
const res = {
status: status => {
console.log("Status: ", status);
return {
send: result => {
console.log("result", result);
}
};
},
getHeader: () => {},
setHeader: () => {}
};
myFunctions.yourFunction(req, res);
})
.catch(console.error);
答案 3 :(得分:1)
CLI的正确语法已更改为myFunc({"message": "Hello!"})