Node.js无法在我的Webhook中读取JSON数据



我有一个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谢谢您的帮助。

最新更新