我有一个ajax电话:
$.ajax({
method: "POST",
url: "http://localhost:3000/",
dataType: "json",
data: JSON.stringify({"start" : a.rangeInfos[0].startMarkerId,
"end" : a.rangeInfos[0].endMarkerId}),
contentType: "application/json; charset=utf-8",
success: function(result) {
console.log(result);
}
});
正在服务器上处理,如:
app.post('/', function(req, res){
res.send('Got a POST request');
database.doSomething(req);
});
doSomething在connection.js中定义为:
doSomething : function(req) {
console.log(req.body);
db.collection('ranges').insert(req.body)
}
一切都很好,除了结果没有被打印出来。 在我对连接和服务器文件进行了一些更改之前它确实打印出来了,所以我怀疑它不是前端问题,而是一些奇怪的异步问题一直在逃避我。
非常感谢帮助。
答案 0 :(得分:0)
第一个res.send必须是"最后一个",所以改变" doSomething"这样的事情:
doSomething : function(req, callback) {
db.collection('ranges').insert(req, function(err, result){
if(err) return callback(err);
console.log(req.body);
console.log('result ', result[0]._id);
return callback(null, result[0]._id);
})
}
和
app.post('/', function(req, res){
database.doSomething(req, function(err, result){
res.send('Got a POST request && saved To DB');
});
});
答案 1 :(得分:0)
您尚未包含任何正文解析器。 req.body
为undefined
,除非实际解析了它。来自manual
包含请求正文中提交的键值对数据。默认情况下,它是未定义的,并在使用正文解析器和multer等身体解析中间件时填充。
拉入body-parser
,并将其用作中间件,例如
var bodyparser = require("body-parser");
var express = require("express");
var app = express();
app.use("/", bodyparser.json());
// ... and the rest of your routes.
答案 2 :(得分:0)
我已经做了上面建议的正确更改(因为它的编码很好),但问题在于我将结果发送回客户端的方式。我猜解析器正在解析出一个空字符串,因此我将后期路由更改为:
app.post('/', function(req, res){
database.doSomething(req, function(err,result){
res.send({result:"Got a POST request"});
});
});
然后客户端上的console.log按预期工作。
答案 3 :(得分:0)
在你宣布的ajax中
dataType:" json"
这意味着您希望以json格式从服务器返回数据。因此无法解析字符串Got a POST request && saved To DB