res.send没有打印到控制台

时间:2016-10-24 22:39:24

标签: ajax node.js

我有一个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) 
}

一切都很好,除了结果没有被打印出来。 在我对连接和服务器文件进行了一些更改之前它确实打印出来了,所以我怀疑它不是前端问题,而是一些奇怪的异步问题一直在逃避我。

非常感谢帮助。

4 个答案:

答案 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.bodyundefined,除非实际解析了它。来自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