node.js:res.send不是一个函数

问题描述

我真的无法弄清楚此函数有什么问题,因为它说res.send不是一个函数

exports.createEphemeralKeys = functions.https.onCall((req,res) => {

console.log("this is the req",req)
var api_version = req["api_version"];
var customer_id = req["customer_id"]
var api_version1 = "2018-08-23"
// var customerId = req.body.customer_id;
console.log("apiver",api_version)
console.log("customer id ",customer_id)

if (!api_version) {
  res.status(400).end();
  return;
}
const key = stripe.ephemeralKeys.create(
    {customer: customer_id},{apiVersion: api_version1}
).then((key) => {
    // asynchronously called
    
    console.log("creating key ",key)
    res.send(key);
    return key
}).catch(err =>{
        console.log(err);
});

});

显示错误

TypeError:res.send不是函数

我该如何解决

解决方法

我认为您编写了错误的代码库。 functions.https.onCall。此方法有两个参数。数据和上下文,其中context是这样的可选参数:

exports.fullName = functions.https.onCall((data,context) => {
});

但是您尝试将其用作响应。 因此,我建议您使用https.onRequest而不是onCall,这样您就可以使用响应了。

,

您需要使用res.end而不是res.send原因Res.send是Express的一部分

,

这似乎是一个Firebase函数调用,因此要发送回响应,您可以只返回要发送回的内容(已经在执行)。

只需从函数中取出res.send(第二个参数是context而不是res)。

context保存有关用户身份验证的信息。 更多信息在这里-https://firebase.google.com/docs/functions/callable