Случайный доступ к базе данных nodejs mongoose не возвращает результат - PullRequest
1 голос
/ 13 июня 2011

Я работаю над своим первым приложением NodeJS, которое в основном представляет собой обычные веб-службы, использующие базу данных MongoDB (размещенную на MongoHQ).

Я использую 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 при попытке обновить Convoy ZX12 Пользователь B обновил свое местоположение на ZX12 Поиск Convoy ZX12 Поиск Convoy ZX12

Вы можете видеть последние 2 поиска Convoy ZX12'sДва раза я пытался вызвать метод, все до этого - журналы с последнего запроса, отправленного несколько часов назад.

Независимо от того, сколько раз я пытаюсь восстановить соединение, это не работает.У кого-нибудь есть идеи относительно того, что это может быть?

1 Ответ

0 голосов
/ 15 октября 2012

Попробуйте поставить end вместо send method

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

        }
});
}
...