Expo React用Express对接Stripe出现Cannot GET /报错如何解决

在Expo React项目中使用Express框架对接Stripe服务时,访问服务持续出现上图的Cannot GET /报错,初始编写代码如下:
import express from "express"; const app = express(); const port = 3000; const PUBLISHABLE_KEY = "pk_test......"; const SECRET_KEY = "sk_test........."; app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });
报错原因
这个报错是Express的默认响应,当前代码仅启动了端口监听,没有定义任何路由处理规则,访问根路径/时找不到匹配的处理逻辑就会返回该错误,和Stripe对接逻辑本身没有关联。
修复方案
- 先添加基础根路由验证服务可用性
在app.listen调用前补充根路径的GET请求处理逻辑,重启服务后再访问http://localhost:3000就能得到正常响应:app.get('/', (req, res) => { res.send('Stripe后端服务运行正常') }) - 补充Stripe对接的必要配置
- 先安装Stripe官方依赖:执行命令
npm install stripe - 在路由定义前添加JSON请求体解析中间件,否则无法读取前端传递的请求参数:
app.use(express.json()) - 编写对应业务接口,所有涉及
SECRET_KEY的逻辑必须放在服务端,示例支付意向接口代码如下:
import Stripe from 'stripe' const stripe = new Stripe(SECRET_KEY, { apiVersion: '2023-10-16' }) app.post('/create-payment-intent', async (req, res) => { try { const paymentIntent = await stripe.paymentIntents.create({ amount: req.body.amount, // 金额单位为对应货币最小单位,如人民币单位为分 currency: 'cny', // 按需替换为实际使用的货币代码 automatic_payment_methods: { enabled: true } }) res.json({ clientSecret: paymentIntent.client_secret }) } catch (err) { res.status(400).json({ error: err.message }) } }) - 先安装Stripe官方依赖:执行命令
- 调试注意事项
*SECRET_KEY为高敏感信息,绝对不能泄露到前端代码中,前端侧仅可使用PUBLISHABLE_KEY初始化Stripe客户端。如果使用Expo真机调试,不要用localhost访问本地服务,替换为电脑在局域网下的IPv4地址,同时确认3000端口未被防火墙拦截。
内容的提问来源于stack exchange,提问作者Eman5648
相关产品推荐
相关产品推荐

