使用请求库的Firebase函数未触发

时间:2018-09-26 20:09:38

标签: javascript firebase request google-cloud-functions

几乎在那里,但是由于某种原因,我的HTTP发布请求没有触发,最终导致函数超时。完全在我自己旁边并发布我的代码,以查看是否有人接受了我完全缺少的任何菜鸟动作。注意:数据库写入已完成,因此我假设未触发HTTP Post请求,这是一个安全的假设吗?还是JS是另一种野兽?

exports.stripeConnect = functions.https.onRequest((req, res) => {
    var code = req.query.code;
    const ref = admin.database().ref(`/stripe_advisors/testing`);
    var dataString = `client_secret=sk_test_example&code=${code}&grant_type=authorization_code`;
    var options = {
            url: 'https://connect.stripe.com/oauth/token',
            method: 'POST',
            body: dataString
    };

    function callback(error, response, body) {
            if (!error && response.statusCode === 200) {
            console.log(body);
            }
    }

    request(options, callback);
    return ref.update({ code: code });
});

1 个答案:

答案 0 :(得分:3)

我了解到您想使用request库发布到https://connect.stripe.com/oauth/token,并且成功后想将code值写入数据库。

您应该在Cloud Function中使用Promise处理异步任务。默认情况下,请求不返回承诺,因此您需要使用接口包装程序来进行请求,例如request-promise

因此,通常应使用以下技巧:

.....
var rp = require('request-promise');
.....

exports.stripeConnect = functions.https.onRequest((req, res) => {
    var code = req.query.code;
    const ref = admin.database().ref('/stripe_advisors/testing');
    var dataString = `client_secret=sk_test_example&code=${code}&grant_type=authorization_code`;
    var options = {
            url: 'https://connect.stripe.com/oauth/token',
            method: 'POST',
            body: dataString
    };

    rp(options)
    .then(parsedBody => {
        return ref.update({ code: code });
    .then(() => {
        res.send('Success');
    })
    .catch(err => {
        console.log(err);
        res.status(500).send(err);
    });

});