一条路线上的 Nodejs bodyParser.raw
Nodejs bodyParser.raw on one route
我的 index.js 中有以下内容:
app.use(bodyParser.json());
但是 Stripe webhooks 想要这个:
Match the raw body to content type application/json
如果我将 index.js 更改为以下内容:
app.use(bodyParser.raw({type: 'application/json'}));
它工作正常。但是我所有其他 API 路线将不再有效。这是我的路线:
router.route('/stripe-events')
.post(odoraCtrl.stripeEvents)
如何只为这条 api 路线更改为裸体?
将它们分成'/api'和'/stripe-events'两个路由器,并仅在第一个路由器上注明bodyParser.json()
:
stripeEvents.js
const express = require('express')
const router = express.Router()
...
router.route('/stripe-events')
.post(odoraCtrl.stripeEvents)
module.exports = router
api.js
const express = require('express')
const router = express.Router()
...
router.route('/resource1')
.post(addResource1)
router.route('/resource2')
.post(addResource2)
module.exports = router
const stripeEventsRouter = require('./routers/stripeEvents';
const apiRouter = require('./routers/api';
apiRouter.use(bodyParser.json());
stripeEventsRouter.use(bodyParser.raw({type: 'application/json'}));
app.use('/api', stripeEventsRouter);
app.use('/api', apiRouter);
您可以通过这样做同时访问两者:
app.use(bodyParser.json({
verify: (req, res, buf) => {
req.rawBody = buf
}
}))
现在可以在 req.rawBody 上获得原始正文,并且可以在 req.body[ 上获得 JSON 解析数据.
我的 index.js 中有以下内容:
app.use(bodyParser.json());
但是 Stripe webhooks 想要这个:
Match the raw body to content type application/json
如果我将 index.js 更改为以下内容:
app.use(bodyParser.raw({type: 'application/json'}));
它工作正常。但是我所有其他 API 路线将不再有效。这是我的路线:
router.route('/stripe-events')
.post(odoraCtrl.stripeEvents)
如何只为这条 api 路线更改为裸体?
将它们分成'/api'和'/stripe-events'两个路由器,并仅在第一个路由器上注明bodyParser.json()
:
stripeEvents.js
const express = require('express')
const router = express.Router()
...
router.route('/stripe-events')
.post(odoraCtrl.stripeEvents)
module.exports = router
api.js
const express = require('express')
const router = express.Router()
...
router.route('/resource1')
.post(addResource1)
router.route('/resource2')
.post(addResource2)
module.exports = router
const stripeEventsRouter = require('./routers/stripeEvents';
const apiRouter = require('./routers/api';
apiRouter.use(bodyParser.json());
stripeEventsRouter.use(bodyParser.raw({type: 'application/json'}));
app.use('/api', stripeEventsRouter);
app.use('/api', apiRouter);
您可以通过这样做同时访问两者:
app.use(bodyParser.json({
verify: (req, res, buf) => {
req.rawBody = buf
}
}))
现在可以在 req.rawBody 上获得原始正文,并且可以在 req.body[ 上获得 JSON 解析数据.