2011-06-13 70 views
1

我正在我的第一个NodeJS应用程序,这基本上只是使用MongoDB(托管在MongoHQ)数据库的宁静的Web服务。nodejs mongoose数据库访问随机does not'返回结果

我使用Express和Mongoose来协助路由和数据库访问,并且它似乎在大多数情况下都能正常工作,但是随机我会遇到一个问题,那就是我写入的一个中间件方法访问数据库开始,并调用猫鼬查找,但它从来没有得到一个响应,并最终http请求超时。

背景知识,我正在处理的域对象被称为'护卫队'它有一个车船代码是它的标识符,我试图在此基础上查找它。

这里是方法

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

你可以看到最后2个发现Convoy ZX12是我试图调用该方法的两次,在此之前的所有内容都是来自上个小时前发送的请求的日志。

无论我尝试重新连接多少次都不起作用。有没有人有任何想法,它可能是什么?

回答

0

尝试把代替发送方法

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); 

     } 
}); 
}