AJAX后快速返回没有数据req.query(是的,有相同的q,但没有任何工作)

这是我的设置。 但是当我通过ajax发送数据的时候,body是空的。 在networking下的Chrome上,我看到了post和内容,正确的有效载荷:

请求

{"EventName":"asd","PrivacyLevel":1,"TypeInt":1,"ExpectedDate":"asd","Desc":"asd","Down":0,"Up":0,"PostCode":"","Address":"","ID":""} 

大多数人说它的身体parsing器,我已经把parsing器放在app.use(app.router)之上我不知道它是否与express.json()创build任何冲突,但是当我评论它没有任何区别。

  app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(express.cookieParser('secret')); app.use(express.session({ secret: 'randomstring' })); app.use(express.bodyParser()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); $.ajax({ url: window.location.origin + '/registerEvent', contentType: 'application/json: charset=utf-8', dataType: 'json', type: 'POST', data: JSON.stringify(Event.toJSONString()), cache: false, timeout: 5000, async: false, success: function (result) { success = true; }, error: function (jqXHR, textStatus, errorThrown) { console.log('error ' + textStatus + " " + errorThrown); success = false; } }); exports.registerEvent = function (req, res) { if (req.session.lastPage === '/index' && req.xhr) { console.log(req); console.log(req.body); console.log('body: ' + JSON.stringify(req.body)); var test = req.query.EventName; 

数据将在req.body (来自AJAX JSON的parsing的HTTP请求体)而不是req.query (URL查询string)中req.query

在你的jQuery ajax代码中,使用contentType: 'application/json' ,并且应该让它做你想要的那种POST请求。

我认为你发现Connect中的一个错误(Express用来分析正文的中间件)。 bodyParser的代码使用一个正则expression式来匹配“application / json”内容types,当“charset = utf-8”被附加到它时,该内容types失败。

这里是我所说的Connect.js代码: https : //github.com/senchalabs/connect/blob/master/lib/middleware/json.js#L54

Connect正在使用的RegEx是

 /^application\/([\w!#\$%&\*`\-\.\^~]*\+)?json$/i 

如果你运行下面的代码节点,你会看到具有“charset = utf-8”的testing失败:

 regex = /^application\/([\w!#\$%&\*`\-\.\^~]*\+)?json$/i regex.test("application/json") // returns true regex.test("application/json: charset=utf-8") // returns false 

在我的情况下,我解决了这个问题:

 res.header("Access-Control-Allow-Origin", "*");