Publication via l'API Discourse et Firebase (Cloud Functions)

Salut tout le monde !

Je rencontre des problèmes étranges que je n’arrive pas à comprendre. J’utilise l’API Discourse pour permettre à quelqu’un de poster sans se connecter. Pour des raisons de sécurité, il s’agit d’un code que j’exécuterai dans un environnement serveur, et l’environnement que j’utilise est Cloud Functions for Firebase basé sur Node.js.

Mon code complet ressemble à ceci :

const functions = require("firebase-functions");
const fetch = require('node-fetch');
const cors = require("cors")({ origin: true });

exports.makeDiscoursePost = functions.https.onRequest((request, response) => {
  cors(request, response, () => {
    let myHeaders = new Headers();
    myHeaders.append("Api-Key", "<removed>");
    myHeaders.append("Api-Username", "system");
    myHeaders.append("Content-Type", 'application/json');

    let requestOptions = {
      method: 'POST',
      headers: myHeaders,
      redirect: 'follow'
    };

    fetch("https://forum.kirupa.com/posts.json?title=Testingggg Discourse API, Part 2&raw=Making a brand new post using the API and seeing if things still work.", requestOptions)
      .then(r => r.json())
      .then(result => response.send(result))
      .catch(error => response.send(error));
  });
});

Je suis convaincu que ce code fonctionne, car lorsque j’exécute le code fetch isolément, un post est créé. C’est lorsqu’il est exécuté via l’environnement des fonctions que j’obtiens une “Erreur interne du serveur”. Lorsque je lis les journaux, je vois “Finished with status: crash”.

Quelqu’un a-t-il des idées sur ce qui pourrait clocher ? Quelqu’un a-t-il réussi à faire fonctionner la création de posts via les fonctions de Firebase ?

(cc @blake - J’ai suivi votre approche Node.js en utilisant la méthode de requête HTTP, et j’ai obtenu les mêmes résultats !)

Merci,
Kirupa

J’ai réussi à résoudre ce problème et je partage mon code révisé au cas où quelqu’un d’autre rencontrerait ce problème :

exports.sendfeedback = onRequest({ cors: "https://www.kirupa.com" }, (req, res) => {
  let myHeaders = new fetch.Headers();
  myHeaders.append("Api-Key", "removed");
  myHeaders.append("Api-Username", "kirupaBot");
  myHeaders.append("Content-Type", 'application/json');

  let requestOptions = {
    method: 'POST',
    headers: myHeaders,
    body: JSON.stringify({
      "raw": req.query.raw,
      "title": req.query.title
    })
  };

  fetch("https://forum.kirupa.com/posts.json", requestOptions)
    .then(r => r.json())
    .then(result => res.send(result))
    .catch(error => res.send(error));
});
1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.