【问题标题】:Node.Js get data from a POST requestNode.Js 从 POST 请求中获取数据
【发布时间】:2019-11-26 17:25:10
【问题描述】:

我正在使用 Firebase 云功能。在 iOS 设备上,我部署了一个触发器以在 Node.Js 中运行云功能。在 Xcode 中 - 这是我触发 Cloud 功能的客户端函数 - 我正在传递字典 data

func updateTermsOfServiceCloudCall(){

    let data = [
        "accountId": "acct_1Ew#######"
    ]

    Functions.functions().httpsCallable("updateAccountWithTOA").call(data) { (result, error) in
 }

现在在 Node 中,我正在运行此代码以部署到 Firebase 云

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


const data = request.body;
const accoundId = data.accoundId;

stripe.accounts.update(

    accoundId,
    {
        tos_acceptance: {
          date: Math.floor(Date.now() / 1000),
          ip: request.ip 
        }
      },
    )

});

我希望得到我从 iOS 客户端传递过来的字典 data。但是,我在 Node.js 中获取该数据时遇到问题。我以为 request.body 会给我数据,但我猜我错了,因为我收到了这个错误。任何帮助或建议将不胜感激。谢谢

错误:条纹:参数“id”必须是字符串,但得到:未定义(在 API请求POST /accounts/{id})

【问题讨论】:

    标签: node.js swift firebase google-cloud-functions stripe-payments


    【解决方案1】:

    您的客户端代码正在尝试调用callable function,但您的函数被定义为HTTP type function。它们是不同的东西。您无法使用 Functions SDK 调用常规 HTTP 函数。

    如果要使用 Functions SDK 调用函数,则需要使用 onCall 而不是 onRequest 进行定义,如documentation for callable functions 所示。或者,如果您不想在后端调用可调用对象,则需要使用 HTTP 客户端库调用常规 HTTP 函数。

    【讨论】:

    • 感谢您的回复.. 所以只是声明 - 我将 onCall 用于其他功能并成功传递数据,所以我知道你是正确的.. 但是 - 对于这个特定的云功能,由于某种原因,我只能通过调用 onRequest 来让“ip:ip.request”工作并写入 Stripe。所以,现在我遇到了无法传递客户帐户 ID 的问题客户端到服务器了。如果这有意义吗?
    • 如果您遇到的问题与您第一次发布的问题不同,请发布一个新问题,并解释现在哪些问题没有按照您的预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多