puzzlo
@puzzlo
добродушен, толстоват

Почему mongoDB не выполняет запрос снова?

mongo.connect(config.get('mongodb:uri') + config.get('mongodb:dbName'), function(err, db) {
        if (err) throw err;
        var col = db.collection(config.get('mongodb:history'));
        var mess = {};
        col.find({_id: {$gt: midnight}}).forEach(function (res) {
            if(res.priv.length == 0 && res.confirm.length == 0) {
                mess = res.whoSend + ': ' + res.message;
                arrayOfMessages.push(mess);
            };
        });
    });
    return arrayOfMessages;

Добрый день.
Эта функция возвращает массив из сообщений за сегодня.
Если зайти, написать сообщение , перелогиниться ( под любым ником ) - то последние написанные сообщения не будет видно,пока не сделаешь рестарт сервера.
Надо как-то закрыть соединение, чтоб он при логине снова приконнектился и увидел новые ?
Или что надо сделать ?
  • Вопрос задан
  • 236 просмотров
Пригласить эксперта
Ответы на вопрос 1
puzzlo
@puzzlo Автор вопроса
добродушен, толстоват
// showTodaySimpleMessages.js 

var   config = require('config')
    , mongo = require('mongodb').MongoClient;

var showTodaySimpleMessages = function () {

    var arrayOfMessages = [];
    var now = new Date();
    var midnight = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime().toString();

    mongo.connect(config.get('mongodb:uri') + config.get('mongodb:dbName'), function(err, db) {
        if (err) throw err;
        var col = db.collection(config.get('mongodb:history'));
        var mess = {};
        col.find({_id: {$gt: midnight}}).forEach(function (res) {
            if(res.priv.length == 0 && res.confirm.length == 0) {
                mess = res.whoSend + ': ' + res.message;
                arrayOfMessages.push(mess);
            };
            db.close();
        });
    });
    return arrayOfMessages;
};
module.exports = showTodaySimpleMessages();

подключились, нашли те сообщения, которые написаны сегодня ( _id - время создания сообщения в миллисекундах ) . если не приватное и не для подтверждения - добавляем в массив. возвратили массив.
на сервере все сообщения из массива послали emit-ом вошедшему человеку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы