如何在Firebase云功能内正确执行axios POST请求 [英] How to correctly execute a axios POST request within a firebase cloud function

查看:148
本文介绍了如何在Firebase云功能内正确执行axios POST请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在开发一个应用程序,该应用程序可在调用以下Firebase云功能时将帖子发布到Facebook.现在的问题是该请求返回了错误408:

I'm currently working on an app that publishes a post to facebook on call of the below firebase cloud function. Problem now is that the request throws back an error 408:

Error - Post on Facebook { Error: Request failed with status code 408
at createError (/user_code/node_modules/axios/lib/core/createError.js:16:15)
at settle (/user_code/node_modules/axios/lib/core/settle.js:18:12)
at IncomingMessage.handleStreamEnd 
(/user_code/node_modules/axios/lib/adapters/http.js:201:11)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:978:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickDomainCallback (internal/process/next_tick.js:128:9)

让我感到困惑的是,通过邮递员的相同请求成功了,没有任何问题:(也许你们中的一个人知道解决此问题的方法:)

The buzzling thing for me is that the same request via postman succeeds without any issues :( Maybe one of you guys knows a fix for this problem :)

const functions = require('firebase-functions');
const cors = require('cors')({ origin: true });
const admin = require('firebase-admin');
const db = admin.firestore();
const axios = require('axios');

export const facebook = functions.region('europe- 
west1').https.onRequest((req, res) => {
  return cors(req, res, () => {

    // Post data
    const data = {
      scheduled: null,
      message: '',
      accessToken: 'token'
    }

    // Get Post data through ID
    db.collection("articles").doc(req.body.id)
    .get().then((doc) => {
      if (doc.exists) {
          data.message = doc.data().meta.facebook.description
          data.scheduled = doc.data().meta.facebook.scheduled
      } else {
          console.log("No such document!");
      }
    }).catch((error) => {
        console.log("Error getting document:", error);
    });

    // Post on Facebook
    if(data.scheduled) {
      const message = data.message
      const access_token = data.accessToken
      axios.post('https://graph.facebook.com/1188810447962053/feed', {
        message,
        access_token
      })
      .then((response) => {
        res.send(200, 'Success - Posted on Facebook', response)
      })
      .catch((error) => {
        res.send(400, 'Error - Post on Facebook', error);
      });
    }
  })
});

推荐答案

我的解决方案:

事实证明,发布请求在'request-promise'npm软件包中可以很好地工作,但根本不适用于axios.

It turns out that the post request works just fine with the 'request-promise' npm package but it simply doesn't work with axios at all.

这是我现在正在使用的相应代码:

That's the respective code I'm using now:

const postToFacebook = {  
  method: 'POST',
  uri: `https://graph.facebook.com/${pageId}/feed`,
  qs: {
    access_token: access_token,
    message: postMessage
  }
};
request(postToFacebook)

这篇关于如何在Firebase云功能内正确执行axios POST请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆