النشر عبر Discourse API و Firebase (Cloud Functions)

مرحباً بالجميع!

أواجه بعض المشكلات الغريبة التي لا أعرف كيف أفهمها. أنا أستخدم واجهة برمجة تطبيقات Discourse للسماح لشخص ما بالنشر دون تسجيل الدخول. لأسباب أمنية، هذا هو الكود الذي سأقوم بتشغيله في بيئة خادم، والبيئة التي أستخدمها هي Cloud Functions for Firebase المستندة إلى Node.js.

الكود الكامل الخاص بي يبدو على النحو التالي:

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));
  });
});

أنا واثق من أن هذا الكود يعمل، فعندما أقوم بتشغيل كود fetch بمعزل عن غيره، يتم إنشاء منشور. ولكن عندما يتم تشغيله عبر بيئة الدوال، أحصل على “خطأ في الخادم الداخلي”. عندما أقرأ السجلات، أرى “انتهى بحالة: تعطل”.

هل لدى أي شخص أي أفكار حول ما قد يكون خاطئًا هنا؟ هل تمكن أي شخص من جعل إنشاء المنشورات يعمل عبر دوال Firebase؟

(إشارة إلى @blake - لقد اتبعت نهجك في Node.js عبر استخدام طريقة طلب HTTP، وحصلت على نفس النتائج!)

شكراً،
كيروبا

تمكنت من إصلاح هذا، وأشارك الكود المعدل الخاص بي في حال واجه شخص آخر هذه المشكلة:

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)

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