我的前端有一个 Vue 应用程序和一个只有几条路由的单独的 Express 服务器。在 app.js 中,我注册了我的路线,如下所示:
const express = require('express')
const cors = require('cors')
require('dotenv').config()
const orders = require('./routes/orders')
const webhooks = require('./routes/webhooks')
const app = express()
// http://expressjs.com/en/4x/api.html#express.urlencoded
app.use(cors())
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
// Register api routes
app.use('/', orders)
app.use('/create-payment-intent', orders)
app.use('/admin', orders)
app.use('/admin/:id', orders)
app.use('/webhook', webhooks)
/*
TODO - fall through route handler
*/
在/routes/orders.js中
const express = require('express')
const router = express.Router()
const { flattenObject, orderValidationRules, validate } =
require('../middlewares/validations')
const OrdersController = require('../controllers/ordersController')
router.route('/').post(
orderValidationRules(),
validate,
OrdersController.apiPostOrder
)
router.route('/admin').get(OrdersController.apiGetOrders)
router.route('/create-payment-intent').post(OrdersController.apiCreatePaymentIntent)
router.route('/:id').delete(OrdersController.apiDeleteOrder)
module.exports = router
/路线/webhooks
const express = require('express')
const router = express.Router()
const WebhooksController = require('../controllers/webhooksController')
router.route('/webhook').post(express.raw({type: 'application/json'}),
WebhooksController.apiPostWebhookEvent)
module.exports = router
在前端,我可以发布订单,点击管理路由,到达服务器上的创建支付意图路由并响应 200,但是当我看到条纹仪表板上是否到达 webhook 时,显示待处理且在服务器上404 未找到:
[![在此处输入图像描述][1]][1]
这是一个快速路由问题,我不确定我是否确实正确设置了路由。我该如何解决?另外,在服务器的本地主机端口上,我无法获取 /create- payment-intent 和 /webhook,/admin 没问题。 [1]:
您的问题是,在 app.js 中您放置了一个中间件函数,该函数使用 JSON 解析传入请求
app.use(express.json())
然后在你的路线 /routes/webhooks 中传递另一个中间件
express.raw({type: 'application/json'}
要工作,请将以下内容放入 app.js 中
// Use JSON parser for all non-webhook routes
app.use(
(
req: express.Request,
res: express.Response,
next: express.NextFunction
): void => {
if (req.originalUrl === '/webhook/') {
next();
} else {
express.json())(req, res, next);
}
}
);