2012-06-25 5 views
0

Я использую express.js с mongoose как ODM.Mongoose не обновляет записи db

Я знаю, что когда другие серверы делают обновление для mongoDB, мангуста не признает это. Таким образом, все еще отображается старое состояние базы данных.

Я думаю, это связано с тем, что mongoose использует обратный вызов для обновления после создания, обновления нового документа, но этот обратный вызов не запускается, когда другая служба взаимодействует с mongoDB.

Итак, как я могу manuelly сказать mongoose, чтобы ухаживать за собственными созданными документами?

маршрутов/user.js

var User = require('../models/user.js') 
, requirements = { enabled: true, expired: false, locked: false }; 

exports.list = function(req, res){ 
    User.find(requirements, function(err, users){ 
     res.send(users); 
    }); 
}; 

app.js

app.get('/users', user.list); 

Когда я теперь доступ/пользователи с завитком или с браузером я получаю массив всех пользователей в mongodb. Это прямо сейчас. Теперь я регистрирую нового пользователя в среде PHP. Когда я теперь запрашиваю/пользователей снова, я все равно получаю тот же массив, что и раньше, без пользователя, созданного поверх php!

Когда я теперь перезапустить службу узла и запрос/пользователь снова РНР создал пользователем есть ....

+0

Ваши утверждения о API Mongoose, не всегда отражающие текущее состояние базы данных, неверны. Результаты предыдущих запросов не отражают каких-либо внешних изменений, внесенных в базу данных, поскольку запросы выполнялись, конечно, но любые новые запросы 'find', безусловно, были бы. В чем конкретно вас беспокоит? – JohnnyHK

+0

Я обновил свой вопрос. –

+1

Похоже, проблема заключается в кэшировании вида в express.js. Вы можете попробовать 'app.disable ('view cache');' посмотреть, так ли это. – Stennie

ответ

0

express.js структура включает кэширование вида, который включен по умолчанию для производственных участков). Я подозреваю, что ваши результаты будут получать кэшируется, потому что вы включили функцию ссылку (user.list), а не закрытие, например:

app.get('/users', function(req, res){ 
    User.find(requirements, function(err, users){ 
     res.send(users); 
    }); 
}); 

Кэширования вида является глобальным параметром и должно быть кэширование только шаблона представления, не содержимое представления. Был запрос на more granular caching, но похоже, что этого не требуется.

Вы можете попробовать отключить кэширование просмотра с помощью:

app.disable('view cache'); 

Хороший ресурс для поиска или попросить разъяснений было бы Express.js Google Group.