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", "*");