我正在开发我的第一个NodeJS应用程序,它基本上就是使用MongoDB (托管在MongoHQ上)数据库的restful web服务。
我正在使用Express和Mongoose来帮助路由和数据库访问,它似乎在大多数情况下都工作得很好,但是随机地我会遇到一个问题,我编写的访问数据库的中间件方法之一启动了,并调用了mongoose查找,但它从未得到响应,最终http请求超时。
背景知识,我正在处理的域对象被称为“车队”,它有一个convoyCode,这是它的标识符,我正试着基于这个来查找它。
下面是方法
function findConvoy(request, response, next){
var convoyCode;
if (request.method == 'GET'){
var _url = url.parse(request.url);
var queryString = qs.parse(_url.query);
convoyCode = queryString.ConvoyCode;
} else {
convoyCode = request.body.ConvoyCode;
}
console.log("Finding Convoy " + convoyCode);
Model.findOne({ name:convoyCode}, function(err, convoy){
if (err){
console.log("Error finding convoy " + err);
response.send('ERROR FINDING CONVOY', 500);
}
if (convoy){
request.ReturnedConvoy = convoy;
console.log("Found Convoy " + convoyCode);
next();
} else {
console.log("Convoy not found.");
response.send('CONVOY NOT FOUND', 404);
}
});
}被调用的POST方法如下所示:
app.post("/JoinConvoy", findConvoy, function(request, response){
//stuff here
}我的数据库模型是
var Convoy = new mongoose.Schema({
name: String
, creator: String
, startDate: Date
, destinationLat: Number
, destinationLong: Number
, currentLocations: [Locations]
});
//get the model
var Model = mongoose.model('Convoy', Convoy);并不是说它应该有那么大的影响。大多数情况下,一切都工作得很好,但似乎当我让服务器运行一段时间而不使用它时,它就会回来,直到我重新启动它才能连接。
以下是控制台日志:
ID 57C18326-7EBB-5A99-88BD-D34E9F108D98尝试更新车队ZX12用户B更新了他们在ZX12查找车队ZX12查找车队ZX12上的位置
你可以看到最近的两次查找护航ZX12是我两次尝试调用该方法,在此之前的所有内容都是几个小时前发送的最后一个请求的日志。
无论我尝试重新连接多少次,它都不起作用。有没有人知道它可能是什么?
发布于 2012-10-15 12:09:23
尝试使用end代替send方法
function findConvoy(request, response, next){
var convoyCode;
if (request.method == 'GET'){
var _url = url.parse(request.url);
var queryString = qs.parse(_url.query);
convoyCode = queryString.ConvoyCode;
} else {
convoyCode = request.body.ConvoyCode;
console.log("Finding Convoy " + convoyCode);
Model.findOne({ name:convoyCode}, function(err, convoy){
if (err){
console.log("Error finding convoy " + err);
response.send('ERROR FINDING CONVOY', 500);
}
if (convoy){
request.ReturnedConvoy = convoy;
console.log("Found Convoy " + convoyCode);
next();
} else {
console.log("Convoy not found.");
// end instead on send
response.end('CONVOY NOT FOUND', 404);
}
});
}https://stackoverflow.com/questions/6330129
复制相似问题