【发布时间】:2017-03-12 03:38:07
【问题描述】:
我将 JSON 请求一一发送到 nodejs 服务器。在第 6 次请求之后,服务器无法立即回复客户端,然后需要一点时间(15 秒或更多一点,然后发回给我回答 200 ok) 它发生了将 json 值写入 MongoDB 并且时间是重要的选项我在 REST 调用方面。在这种情况下如何找到错误? (哪个工具或脚本代码可以帮助我?)我的服务器端代码是这样的
var controlPathDatabaseSave = "/save";
app.use('/', function(req, res) {
console.log("req body app use", req.body);
var str= req.path;
if(str.localeCompare(controlPathDatabaseSave) == 0)
{
console.log("controlPathDatabaseSave");
mongoDbHandleSave(req.body);
res.setHeader('Content-Type', 'application/json');
res.write('Message taken: \n');
res.write('Everything all right with database saving');
res.send("OK");
console.log("response body", res.body);
}
});
我的客户端代码如下:
function saveDatabaseData()
{
console.log("saveDatabaseData");
var oReq = new XMLHttpRequest();
oReq.open("POST", "http://192.168.80.143:2800/save", true);
oReq.setRequestHeader("Content-type", "application/json;charset=UTF-8");
oReq.onreadystatechange = function() {//Call a function when the state changes.
if(oReq.readyState == 4 && oReq.status == 200) {
console.log("http responseText", oReq.responseText);
}
}
oReq.send(JSON.stringify({links: links, nodes: nodes}));
}
--mongodb保存代码
function mongoDbHandleSave(reqParam){
//Connect to the db
MongoClient.connect(MongoDBURL, function(err, db)
{
if(!err)
{
console.log("We are connected in accordance with saving");
} else
{
return console.dir(err);
}
/*
db.createCollection('user', {strict:true}, function(err, collection) {
if(err)
return console.dir(err);
});
*/
var collection = db.collection('user');
//when saving into database only use req.body. Skip JSON.stringify() function
var doc = reqParam;
collection.update(doc, doc, {upsert:true});
});
}
您可以在 google chrome 开发人员编辑器中查看我的 REST 调用。 (前六个调用有 200 ok。最后一个处于挂起状态)
--客户端输出
--服务器输出
提前致谢,
【问题讨论】:
-
你能粘贴服务器输出和客户端javascript控制台输出吗?相对而言,您的代码可以清理很多,这可能有助于发现错误的来源... 编辑: 还请包含
mongoDbHandleSave函数。如果其中包括数据库凭据,请将凭据替换为变量。 -
@FissureKing 我根据你的意愿更新了问题。
-
我猜你的
ServerResponses 没有被终止。撇开你设置一个值为application/json的Content-Type标头然后发送纯文本这一事实不谈,我想说尝试在你的路由中注释掉mongoDbHandleSave之后的所有内容并发送一个简化的响应以进行测试:res.status(200).end().
标签: javascript node.js mongodb rest