J'ai essayé de nouvelles fonctions de nuage appelables firebase dans firebase functions:Shell
Je continue à avoir l'erreur suivante
La requête a un type de contenu incorrect.
et
RÉPONSE REÇUE DE LA FONCTION: 400, {"erreur": {"statut": "INVALID_ARGUMENT", "message": "Requête incorrecte"}}
Voici ho W J'essaie d'appeler cette fonction sur Shell
myFunc.post (dataObject)
J'ai aussi essayé ça
myFunc.post (). form (dataObject)
Mais alors je me trompe d’erreur de codage (formulaire). dataObject
est un JSON valide.
Mettre à jour:
J'ai pensé que je devais utiliser firebase serve
pour l'émulation locale de ces fonctions callable https
. Les données doivent être passées dans la requête post comme ceci (notez comment elles sont imbriquées dans le paramètre data
)
{
"data":{
"applicantId": "XycWNYxqGOhL94ocBl9eWQ6wxHn2",
"openingId": "-L8kYvb_jza8bPNVENRN"
}
}
Ce que je ne peux toujours pas comprendre, c'est comment puis-je transmettre des informations d'authentification factices lors de l'appel de cette fonction via un client REST
J'ai réussi à le faire fonctionner à partir des fonctions Shell:
myFunc.post('').json({"message": "Hello!"})
Si vous regardez le code source , vous constaterez qu’il s’agit simplement d’une fonction post https normale. Avec un en-tête d’authentification contenant un jeton Web Json, je vous recommande d’utiliser l’API de l’unité pour https. functions et mocking des méthodes d'en-tête pour renvoyer un jeton d'un utilisateur test ainsi que le corps de la requête
[Mise à jour] Exemple
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 = "[email protected]";
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);
Autant que je sache, le paramètre second de la fonction contient toutes les données supplémentaires. Passez un objet contenant une carte headers
et vous devriez pouvoir spécifier tout ce que vous voulez.
myFunc.post("", { headers: { "authorization": "Bearer ..." } });
Si vous utilisez Express pour gérer le routage, il se présente simplement comme suit:
myApp.post("/my-endpoint", { headers: { "authorization": "Bearer ..." } });