【问题标题】:Stripe error: EventEmitter is not a constructor条纹错误:EventEmitter 不是构造函数
【发布时间】:2022-01-01 19:07:06
【问题描述】:

你好,

我正在开发一个使用 Stripe 进行支付的项目,这个项目使用的框架是 SvelteKit,为了方便我也使用 TS。

我实现了 Stripe 支付,在本地进行了测试,一切正常,然后我将项目部署到 Firebase 云功能,然后出现了第一个错误。每次调用时创建支付意图的端点都会失败(但仅在 FB 云功能中,它从未在本地失败)。

所以我决定(不仅仅是因为这个错误)将生成支付意图的函数移动到我的 __layout.svelte 之一,在那里它可以从前端调用并在后端执行,而无需发出 HTTP 请求到暴露于整个互联网的端点。

条带配置:

import Stripe from "stripe";

console.log('secret defined:', import.meta.env.VITE_STRIPE_SECRET_KEY);
const stripe = new Stripe(import.meta.env.VITE_STRIPE_SECRET_KEY, {
    apiVersion: '2020-08-27',
});
console.log('after stripe conf');

export default stripe;

我将该函数移至所需的 __layout.svelte 并收到错误 EventEmitter is not a constructor

然后我找到了this 的问题,并按照答案的建议做了。然后我得到了不同的错误: http.Agent is not a constructor.

【问题讨论】:

    标签: stripe-payments svelte vite sveltekit


    【解决方案1】:

    嗯,这是一个比较难的问题,和Vite有关。后端的 Stripe API 是用 CJS 编写的,Vite 在使用 SSR 时处理 CJS 代码存在问题。根据文档,我应该包括条带进行优化,但这不起作用。这些 Github 问题更好地描述了这个问题:Svelte issueVite issue

    我很幸运我使用了 Firebase,所以我通过将生成支付意图的函数移动到 Cloud Functions 来解决这个问题。所以这对我来说是解决方案,而不是对所有人,但我希望这会对某人有所帮助。

    【讨论】:

    • 嗨,您可以测试我在这个答案中解释的内容,稍后我会返回结果,因为我需要在 Svelte 应用程序上实现 Stripe:stackoverflow.com/questions/70478728/…
    • @flydev 你说的应用是 Svelte 还是 SvelteKit 应用?
    • @Hejmus 链接的答案工作适用于 Svelte,但该技巧也适用于 Sveltekit,如果您想尝试,您必须在 onMount() 上写 imports。您也可以提出一个新问题并ping我,我会看看我是否可以解决。
    猜你喜欢
    • 1970-01-01
    • 2017-07-27
    • 2019-08-11
    • 2022-06-11
    • 2012-06-09
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多