繁体   English   中英

无法从 function 源生成清单:TypeError:无法读取未定义的属性(读取“秘密”)反应 js 节点 js

[英]Failed to generate manifest from function source: TypeError: Cannot read properties of undefined (reading 'secret') react js node js

我尝试替换:

const stripe =const stripe=require("stripe")('sk_test_51KMbN...');

const stripe = require("stripe")(functions.config().stripe.secret);

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

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

我已经将其设置如下:

firebase functions:config:set stripe.secret=< SECRET KEY>

我可以通过运行看到它:

firebase functions:config:get

在此处输入图像描述

我在 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);

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

 const stripe =const stripe=require("stripe")('sk_test_51KMbNcJ....');

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

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

如果您在部署之前尝试测试您的功能,这里是有关如何执行此操作的文档的链接:在本地运行功能。 具体来说,这部分很有趣:

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

firebase functions:config:get > .runtimeconfig.json

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

firebase functions:config:get | ac .runtimeconfig.json

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM