我通过在我的javascript代码中调用此函数来创建XMLHTTPRequest,如下所示
ajaxFunctions.ready(ajaxFunctions.ajaxRequest('POST', appUrl+'/new-poll/option-entered', value, function(data){
console.log(data);
}));
然后我制作实际的xmlhttp请求,如下所示
var ajaxFunctions = {
ready: function ready (fn) {
if (typeof fn !== 'function') {
return;
}
if (document.readyState === 'complete') {
return fn();
}
document.addEventListener('DOMContentLoaded', fn, false);
},
ajaxRequest: function ajaxRequest (method, url, data, callback) {
console.log('Entered the ajaxRequest function');
console.log(data);
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
console.log('Making the request');
callback(xmlhttp.response);
}
};
xmlhttp.open(method, url, true);
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send(data);
}
};
但是当我尝试在POST路由中访问下面的数据时,我收到一个错误,因为req.body似乎未定义。但是,我的res.json工作正常,这意味着我没有以正确的方式访问我传递的数据。
app.route('/new-poll/option-entered')
.post(function(req, res){
console.log(req.body.data);
res.json('Hi I can return data');
});
};
我承认这个问题可能只是重复,但我似乎无法找到我应该访问通过xmlhttp.send()发送的数据的确切位置!检查MDN文档后,我认为它可能附加到req.body,但返回undefined。那么我在哪里可以找到所附的数据,或者我在发送数据的方式上犯了错误,例如设置错误的RequestHeader?
答案 0 :(得分:0)
您的Express服务器中似乎缺少body-parser
中间件。如果您想使用req.body
,则需要将其作为中间件添加到Express服务器。
摘自Express
req.body
docs<强> req.body 强>
包含请求正文中提交的键值对数据。默认情况下,它是未定义的,并在使用正文解析器和multer等身体解析中间件时填充。
您需要安装body-parser
,因为它不是express
包的一部分。
npm i --save body-parser
然后在您的路线之前将其添加到Express Server:
const express = require('express');
const server = express();
const bodyParser = require('body-parser');
const port = process.env.PORT || 1337;
server.use(bodyParser.json()); // allows Content-Type application/json
server.use(bodyParser.urlencoded({ extended: true }); // parses Content-Type x-www-form-urlencoded
// Your routes go here
server.listen(port, () => { console.log(`listening on ${port}`); });