使用Firebase CLI shell

时间:2018-04-06 06:55:09

标签: node.js firebase google-cloud-functions firebase-cli

我一直在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客户端调用该函数时传递虚拟身份验证信息

4 个答案:

答案 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!"})