从JavaScript到nodejs服务器的AJAX POST JSON

我试图发送一个JSON对象从javaScript到node.js服务器。 我使用标准的XMLHttpRequest从JavaScript和标准的node.js代码发送它。

两个代码似乎正在通信,但是node.js总是给我一个空的JSON对象。 我不确定我在做什么错。

这是我的JavaScript代码:

 <html> <head> <script> function xhrPost() { var data = {"name":"John", "time":"2pm"}; var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { if (this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://[serverIP]:8080/addUser"); xhr.setRequestHeader("cache-control", "no-cache"); xhr.setRequestHeader("content-type", "application/json;charset=UTF-8"); xhr.send(JSON.stringify(data)); } </script> </head> <body onload="xhrPost()"> </body> </html> 

这是我的node.js代码:

 var express = require("express"); var myParser = require("body-parser"); var app = express(); app.use(myParser.urlencoded({extended : true})); app.post("/addUser", function(request, response) { console.log(request.body); // this line allways produce {} response.send("Message received."); response.end(); }); app.listen(8080); 

以下行后:

 var myParser = require("body-parser"); 

你应该添加更多的行,如下所示:

  var myParser = require("body-parser"); app.use(myParser.json());// parse application/json 

这是最有帮助的stackoverflow页面来解决我的问题。

我试图获取表单字段,在客户端将其制定成JSON,然后发送到服务器以使用字段来将MySQL调用到单独的数据库。

 Object {name: "", reps: "1", weight: "1", date: "", lbs: "0"} 

我能够正确地在客户端上logging对象,但是每次我尝试将数据发送到服务器时,

 console.log(req.body); 

总是会在服务器上返回

 {} undefined 

服务器端我的设置与function数据传递是

 var express = require('express'); var mysql = require('./dbcon.js'); var app = express(); var handlebars = require('express-handlebars').create({defaultLayout:'main'}); var request = require('request'); var myParser = require("body-parser"); var async = require('async'); app.set('view engine', 'handlebars'); app.set('port', Number(process.env.PORT || 3000)); app.use(myParser.json()); app.use(express.static('public')); app.engine('handlebars', handlebars.engine); 

在我的客户端的JS文件,我有一个表单提交function:

 var data = { "name":document.getElementById("fname").value, "reps":document.getElementById("freps").value, "weight":document.getElementById("fweight").value, "date":document.getElementById("fdate").value, "lbs":bool }; ... req.open("POST", "/insert", true); req.setRequestHeader("content-type", "application/json;charset=UTF-8"); ... req.send(JSON.stringify(data));