我试图使用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,我需要配置身体可读?请帮忙!
答案 0 :(得分:1)
这取决于您是如何设置AjaxAppender
的。它可以被配置为发送日志消息,就好像发布一堆表单字段(这听起来好像你正在期待的那样)或者只是发送其有效负载未编码(这似乎正在发生)。请参阅手册中的注释: