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

时间:2015-01-23 01:27:58

标签: node.js express cors log4javascript

我试图使用express创建一个非常基本的node.js应用程序,它通过CORS和HTTPS从log4javascript获取浏览器事件日志,并将它们写入mongoDB。我一直试图让bodyParser显示数据。我尝试了各种bodyParser配置,但是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);                          

以下是根据Chrome发送log4javascript的示例:

  

请求有效负载   [{"记录器":" [默认]""时间戳":1421974733969,"电平":" INFO&#34 ;," URL":" https://开头***** /""消息&#34 ;: [" {\"消息\":\"用户点击隐藏表单\",\"表单\":\" audio \",\& #34; userAgent \":\" mozilla / 5.0(macintosh; intel mac os x 10_10_1)applewebkit / 537.36(khtml,like gecko)chrome / 39.0.2171.95 safari / 537.36 \", \" browserTimestamp \":\"星期五,2015年1月23日00:58:53 GMT \",\" browserUnixTime \":1421974733968,lds_display_name = barnaby_b%40testing **** COM \"}"]},{"记录器":" [默认]""&时间戳#34;:1421974734498,"电平":" INFO"" URL":" HTTPS://*******.com /","消息":[" {\"消息\":\"用户点击以展开表单\", \"形式\":\" audio \",\" userAgent \":\" mozilla / 5.0(macintosh; intel mac os x 10_10_1)applewebkit / 537.36(khtml,like gecko)chrome / 39.0.2171.95 safa ri / 537.36 \",\" browserTimestamp \":\"星期五,2015年1月23日00:58:54 GMT \",\" browserUnixTime \ ":1421974734497,lds_display_name = barnaby_b%40testing。*****。com \"}"]},....等。

我做错了什么? CORS,或HTTPS,或APACHE mod_proxy或其他任何东西是否会影响Express解析正文的能力? Log4Javascript是否以某种奇怪的方式发送POST,我需要配置身体可读?请帮忙!

1 个答案:

答案 0 :(得分:1)

这取决于您是如何设置AjaxAppender的。它可以被配置为发送日志消息,就好像发布一堆表单字段(这听起来好像你正在期待的那样)或者只是发送其有效负载未编码(这似乎正在发生)。请参阅手册中的注释:

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