为了账号安全,请及时绑定邮箱和手机立即绑定

Cloud Function Firebase request.body 未定义

Cloud Function Firebase request.body 未定义

GCT1015 2021-12-02 15:56:42
用户端:使用 fetch 函数的 POST 方法:let response = await fetch(url, {  "method": "POST",  "headers": {    "Content-Type": "application/json"  },  "body": JSON.stringify({"stripeToken": token.id})});服务器端:要获取的 URL 是 Firebase 云函数:const functions = require('firebase-functions');const cors = require('cors')({origin: true});const stripe = require("stripe")("PRIVATE_KEY");exports.chargeStripe = functions.https.onRequest( async (request, response) => {    // Getting token    let token = request.body.stripeToken;    // Creating charge    let charge = await stripe.charges.create({        amount: 99,        currency: 'eur',        description: 'Payment',        source: token    });    // Sending response    charge ? send(response, 200, {message: 'Success'}) : send(response, 500, {message: 'Error!'});});问题是我得到console.log(token) → 'undefined'.更新 1Chrome(浏览器)似乎正在阻止获取功能(CORS 策略)。如果我通过 Insomnia 测试端点,则一切正常。那么,有人知道在这种情况下该怎么做吗?更新 2感谢Doug Stevenson,我在函数中添加了 CORS 中间件:exports.chargeStripe = functions.https.onRequest( (request, response) => {    // Enable CORS using the `cors` express middleware.    return cors(request, response, async () => {        // Reading token        let token = request.body.stripeToken;        // Charging user        let charge = await stripe.charges.create({            amount: 99,            currency: 'eur',            description: 'Payment',            source: token        });        // Sending response         response.status(200).send('Ok');    });}); 现在一切正常!
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

我添加了cors package:


const cors = require('cors')({origin: true});

然后,我在函数内部使用了 CORS 中间件。所以,最终的解决方案是:


const functions = require('firebase-functions');

const cors = require('cors')({origin: true});

const stripe = require("stripe")("PRIVATE_KEY");


exports.chargeStripe = functions.https.onRequest( (request, response) => {


    // Enable CORS using the `cors` express middleware.

    return cors(request, response, async () => {


        // Reading token

        let token = request.body.stripeToken;


        // Charging user

        let charge = await stripe.charges.create({

            amount: 99,

            currency: 'eur',

            description: 'Payment',

            source: token

        });


        // Sending response 

        response.status(200).send('Ok');

    });


}); 


查看完整回答
反对 回复 2021-12-02
  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信