我有一个node.js express应用程序。它有一个我提供给第三方服务的网络钩。该服务将帖子请求发送给我的Webhook,并带有JSON主体,看起来像这样:
{" split_info":" null"," customername":"商人名称", "额外费用":" null"," paymaymode":" cc",, "状态":"释放付款"," paymaindid":" 551731", " productInfo":" productInfo"," customeremail":" test@gmail.com", " customerphone":" 9876543212"," merchantTransactionId":" jnn", "量":" 100.0"," udf2":" null"," notificationid":" 4"," udf1":" null", " udf5":" null"," udf4":" null"," udf3":" null"," error_message":"不 错误"}
我正在使用身体比较模块读取发布数据。但是,当我做req.body时,它给出了[对象],如果我做json.stringify(req.body),则会给出{}即空。如果我尝试访问响应中的键,例如req.body.paymentmode,则它给出了未定义的。
这是我的webhook的路由器代码: mywebhook.js
var express = require('express');
var router = express.Router();
router.post('/success', function(req, res){
//this is where I need to strip the JSON request
//req.body or JSON.stringify(req.body) or anything that works
//if everything is okay then I send
res.sendStatus(200);
});
module.exports = router;
我的 app.js 看起来像这样:
var express = require('express');
var exphbs = require('express-handlebars');
var router = express.Router();
var bodyParser = require('body-parser');
var mywebhook = require('./routes/mywebhook');
var app = express();
.
.
.
app.use(bodyParser.urlencoded({'extended':'true'})); // parse application/x-www-form-urlencoded
app.use(bodyParser.json()); // parse application/json
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json
app.use('/callwebhook', mywebhook);
.
.
.
so on
很确定我缺少某件事或做错了什么,但是我无法弄清楚。
谢谢。
我终于找到了正在发生的事情。
Body-Parser的工作方式是,它只会尝试解析他们了解内容类型的请求。这主要是这样您可以堆叠它们(应用程序。使用多种解析器类型而不会发生冲突),并且因为您通常不想解析会失败的请求(content-type:text/text/html不太可能通过例如,json.parse)。
我最终被发送了*/*; charset=UTF-8
,这甚至不是有效的内容类型标题值周期。身体较偏生的模块拒绝接受,因为那是胡言乱语。该模块确实允许您设置一个功能,使您可以放置任何要执行过滤的自定义逻辑。
我不得不将身体解析器放入我的路由器代码中,只是为此Webhook情况。
var bodyParser = require('body-parser');
var customParser = bodyParser.json({type: function(req) {
return req.headers['content-type'] === '*/*; charset=UTF-8';
}});
router.post('/success', customParser, function(req, res){
console.log(JSON.stringify(req.body));
});
@svens谢谢您的帮助。