首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机访问nodejs mongoose数据库不返回结果

随机访问nodejs mongoose数据库不返回结果
EN

Stack Overflow用户
提问于 2011-06-13 20:00:59
回答 1查看 406关注 0票数 1

我正在开发我的第一个NodeJS应用程序,它基本上就是使用MongoDB (托管在MongoHQ上)数据库的restful web服务。

我正在使用Express和Mongoose来帮助路由和数据库访问,它似乎在大多数情况下都工作得很好,但是随机地我会遇到一个问题,我编写的访问数据库的中间件方法之一启动了,并调用了mongoose查找,但它从未得到响应,最终http请求超时。

背景知识,我正在处理的域对象被称为“车队”,它有一个convoyCode,这是它的标识符,我正试着基于这个来查找它。

下面是方法

代码语言:javascript
复制
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方法如下所示:

代码语言:javascript
复制
    app.post("/JoinConvoy",  findConvoy, function(request, response){
    //stuff here

    }

我的数据库模型是

代码语言:javascript
复制
    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是我两次尝试调用该方法,在此之前的所有内容都是几个小时前发送的最后一个请求的日志。

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

EN

回答 1

Stack Overflow用户

发布于 2012-10-15 12:09:23

尝试使用end代替send方法

代码语言:javascript
复制
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);

        }
});
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6330129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档