2016-10-24 126 views
0

我有一個Ajax調用:res.send不打印到控制檯

$.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

你的結果是什麼?你有幾個'console.log',哪一個沒有被打印? –

+0

res.send('有POST請求')不打印出來。 –

回答

0

在阿賈克斯你宣佈

數據類型: 「JSON」

這意味着你下JSON格式的預期數據從服務器返回。所以字符串Got a POST request && saved To DB無法解析

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'); 
    }); 
}); 
+0

它並不是最後一件事。 OP的代碼將發送一個響應,然後執行一次數據庫事務。它不會停止在'/'處理程序的中間。 – slugonamission

+0

是的,你有正確的^^,但想象一下,如果我們有一個Ajax請求,我們希望看到發生了什麼(成功或失敗),這就是爲什麼我建議離開res.send結束例如,如果他得到一個錯誤數據庫插入,他可以使用res.send與自定義錯誤,但在上面的例子中,他不能,因爲響應已經交付 – lefdilia

0

你不包含任何身體解析器。 req.bodyundefined,除非事實上已經解析了它。來自manual

包含在請求正文中提交的鍵值對數據。默認情況下,它是未定義的,並且在使用body-parser和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. 
+0

我將我的數據字符串化並使用AJAX發送到服務器。然後,我接受obj並繼續將其傳遞給數據庫並存儲它。我正在使用MongoDB,並且能夠以我想要的方式成功查看存儲在數據庫中的對象。不知道我是否需要解析它。 此外,它看起來像整個過程是如此工作,爲什麼服務器不返回'有發佈請求'? –

0

我做了上述建議的適當改變(因爲它是良好的編碼),但問題是與我將結果發送回客戶端的方式。我猜解析器解析出一個空字符串,所以我改變了路線後爲:

app.post('/', function(req, res){ 
database.doSomething(req, function(err,result){ 
    res.send({result:"Got a POST request"}); 
}); 

}); 

然後在客戶端上的console.log發揮預期。