1

我正在尝试使用 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 的示例:

. 等等 . 等等

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

4

1 回答 1

1

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

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

于 2015-01-23T10:05:38.483 回答