[英]Node.js unable to read POST JSON data in my webhook
我有一個node.js + Express應用程序。 它已經提供給第三方服務了。 該服務使用JSON主體向我的Webhook發送POST請求,如下所示:
{“ split_info”:“ null”,“ customerName”:“商家名稱”,“ additionalCharges”:“ null”,“ paymentMode”:“ CC”,“ hash”:“ a31ff1b91fd9b8ae9c82f38b02348d21fsdfd86cc828ac9a0acf82050b3e9a9e9a9e3a3e3b3e3e3b0b3e3b0e3e3b0e3e3b3e0b0e3b0e3b0e0b0e8e3b0e3b0e3b0e8e3e8e3b0e3b0e3b0e3b0b0e8e3b0bf0b使用者,“ paymentId”:“ 551731”,“ productInfo”:“ productInfo”,“ customerEmail”:“ test@gmail.com”,“ customerPhone”:“ 9876543212”,“ merchantTransactionId”:“ jnn”,“ amount”:“ 100.0”,“ udf2”:“ null”,“ notificationId”:“ 4”,“ udf1”:“ null”,“ udf5”:“ null”,“ udf4”:“ null”,“ udf3”:“ null” ,“ error_Message”:“沒有錯誤”}
我正在使用body-parser模塊讀取POST數據。 但是,當我執行req.body時,它給出了[object Object],如果我執行了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
可以肯定的是,我遺漏了一些東西或做錯了什么,但是我無法弄清楚。
謝謝。
我終於發現發生了什么事。
主體解析器的工作方式是,它將僅嘗試解析他們理解Content-Type的請求。 這主要是因為您可以堆疊它們(應用程序使用多種解析器類型而不會發生沖突),並且還因為您通常不希望解析將失敗的請求(內容類型:text / html不太可能通過例如JSON.parse)。
我最終被發送*/*; charset=UTF-8
*/*; charset=UTF-8
,它甚至不是有效的Content-Type標頭值周期。 主體分析器模塊拒絕接受它,因為那是亂碼。 該模塊確實允許您設置一個函數,該函數允許您放置要執行過濾的任何自定義邏輯。
我只需要針對這種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謝謝您的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.