无法从函数源生成清单:类型错误:无法读取未定义的属性(读取“秘密”)反应 js 节点 js

Gra*_*ace 0 node.js stripe-payments firebase reactjs google-cloud-functions

我尝试替换:

const stripe =const stripe=require("stripe")('sk_test_51KMbN...');
Run Code Online (Sandbox Code Playgroud)

const stripe = require("stripe")(functions.config().stripe.secret);
Run Code Online (Sandbox Code Playgroud)

但是当我运行 firebase 模拟器时,我遇到了一个错误:

错误:无法从源加载函数定义:无法从​​函数源生成清单:TypeError:无法读取未定义的属性(读取“秘密”)

我已经将其设置如下:

firebase functions:config:set stripe.secret=< SECRET KEY>
Run Code Online (Sandbox Code Playgroud)

我可以通过运行看到它:

firebase functions:config:get
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我在functions/index.js中的代码是

const functions = require("firebase-functions");
const express=require("express");
const cors=require("cors");
require('dotenv').config({ path: './.env' });
//API
const stripe = require("stripe")(functions.config().stripe.secret);

//App config
const app=express();
var admin = require("firebase-admin");
var serviceAccount = require("./serviceAccountKey.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});
//middlewares
app.use(cors({origin: true}));
app.use(express.json());
async function createCheckoutSession(req, res) {
  
  const domainUrl = process.env.WEB_APP_URL;
  const { line_items, customer_email } = req.body;
  if (!line_items || !customer_email) {
    return res.status(400).json({ error: 'missing required session parameters' });
  }
  let session; 
  try {
    session = await stripe.checkout.sessions.create({
      payment_method_types: ['card'],
      mode: 'payment',
      line_items,
      customer_email,
      success_url: `${domainUrl}/success?session_id={CHECKOUT_SESSION_ID}`,
      cancel_url: `${domainUrl}/canceled`,
      shipping_address_collection: { allowed_countries: ['GB', 'US'] }
    }); 
    res.status(200).json({ sessionId: session.id, });
  } catch (error) {
    console.log(error);
    res.status(400).json({ error: 'an error occured, unable to create session'});
  }}
app.get('/',(req, res)=>res.send('Hello World!'));
app.post('/create-checkout-session', createCheckoutSession);
exports.api=functions.https.onRequest(app);
Run Code Online (Sandbox Code Playgroud)

当我定义时代码没有问题:

 const stripe =const stripe=require("stripe")('sk_test_51KMbNcJ....');
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它无法读取未定义的“functions.config().stripe.secret”的属性

nar*_*rma 6

如果像我一样,您在尝试在本地运行函数时遇到此错误,那么这是因为functions.config()仅在Cloud Functions运行时中可用。

如果您尝试在部署之前测试函数,请参阅以下文档链接,了解如何执行此操作:在本地运行函数。具体来说,这部分很有趣:

如果您使用自定义函数配置变量,请在运行 firebaseserve 之前在项目的函数目录中运行以下命令。

firebase functions:config:get > .runtimeconfig.json
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用的是 Windows PowerShell,请将上述命令替换为:

firebase functions:config:get | ac .runtimeconfig.json
Run Code Online (Sandbox Code Playgroud)