即使在node.js应用程序中使用body-parser,req.body仍然在POST中为空(使用CORS和HTTPS)

我正在尝试使用express来创build一个非常基本的node.js应用程序,它将来自log4javascript的浏览器事件日志通过CORS和HTTPS,并将它们写入到mongoDB中。 我坚持试图让bodyParser显示数据。 我尝试了各种各样的bodyParserconfiguration,但req.body,req.params和req.query总是空的。

这是我的代码。

var fs = require('fs'), bodyParser = require('body-parser'), express = require('express'), cors = require('cors'), app = express(), https = require('https'), key = fs.readFileSync('*****/key.pem'), cert = fs.readFileSync('*****/cert.pem'), https_options = { key: key, cert: cert }; app.use(bodyParser.json()); app.use(cors()); app.post('/', function (req, res) { console.log(req); res.send('Hello World!') }); https.createServer(https_options, app).listen(3443); 

我在log4javascript中使用JSON布局。 这是我的前端代码:

  var logger = log4javascript.getDefaultLogger(), userAgent = navigator.userAgent.toLowerCase(), ajaxAppender = new log4javascript.AjaxAppender("https://***/log/"); ajaxAppender.addHeader("Content-Type", "application/json"); jsonLayout = new log4javascript.JsonLayout(false, false); ajaxAppender.setLayout(jsonLayout); ajaxAppender.setBatchSize(10); ajaxAppender.setThreshold(log4javascript.Level.INFO); logger.addAppender(ajaxAppender); 

这里是一个log4javascript根据Chrome发送的样本:

Request Payload [{“logger”:“[default]”,“timestamp”:1421974733969,“level”:“INFO”,“url”:“https:// ***** /”,“message”:[ “{\”message \“:\”用户点击隐藏窗体\“,\”窗体\“:\”audio \“,\”userAgent \“:\”mozilla / 5.0(macintosh; intel mac os x 10_10_1 )applewebkit / 537.36(khtml,像gecko)chrome / 39.0.2171.95 safari / 537.36 \“,\”browserTimestamp \“:\”Fri,23 Jan 2015 00:58:53 GMT \“,\”browserUnixTime \“:1421974733968 ,lds_display_name = barnaby_b%40testing **** COM \ “}”]},{ “logging器”: “[默认]”, “时间戳”:1421974734498, “电平”: “INFO”, “URL”:” https://*******.com/“,”消息“:[”{\“message \”:\“用户单击以展开窗体\”,\“窗体\”:\“audio\ “\”userAgent \“:\”mozilla / 5.0(macintosh; intel mac os x 10_10_1)applewebkit / 537.36(khtml,像gecko)chrome / 39.0.2171.95 safari / 537.36 \“,\”browserTimestamp \“:\” Fri,23 Jan 2015 00:58:54 GMT \“,\”browserUnixTime \“:1421974734497,lds_display_name = barnaby_b%40testing。*****。com \”}“]},….等

我究竟做错了什么? CORS,HTTPS或APACHE mod_proxy,或其他任何干扰Express的parsing身体的能力? Log4Javascript是否以一种奇怪的方式发送POST,我需要configuration正文以便读取? 请帮忙!

这取决于你如何设置AjaxAppender 。 它可以configuration为发送日志消息,或者发送一堆表单字段(这听起来就像你期望的那样),或者只是发送未经编码的负载(这似乎正在发生)。 请参阅手册中的说明:

http://log4javascript.org/docs/manual.html#ajaxappender