【发布时间】:2012-06-28 13:19:26
【问题描述】:
我使用 express.js 和 mongoose 作为 ODM。
我知道当其他服务对 mongoDB 进行更新时,mongoose 无法识别这一点。所以仍然显示数据库的旧状态。
我认为这是因为 mongoose 在创建、更新新文档后使用回调来获取更新,但是当另一个服务与 mongoDB 交互时,此回调不会被触发。
那么我怎么能手动说猫鼬照顾不是自己创建的文档呢?
routes/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);
当我现在使用 curl 或浏览器访问 /users 时,我得到了 mongodb 中所有用户的数组。直到现在都是这样。现在我在我的 PHP 环境中注册了一个新用户。当我现在再次请求 /users 时,我仍然得到与以前相同的数组,而没有通过 php 创建的用户!
当我现在重新启动节点服务并再次请求 /users 时,由 php 创建的用户就在那里......
【问题讨论】:
-
您关于 Mongoose API 的断言并不总是反映数据库的当前状态是不正确的。当然,先前查询的结果不会反映自执行查询以来对数据库所做的任何外部更改,但任何新的
find查询肯定会。您关心的具体案例是什么? -
听起来问题可能是 express.js 中的视图缓存。你可以试试
app.disable('view cache');看看是不是这样。 -
就是这样:)。使用 node.js 作为通信 API 时禁用视图缓存是默认行为吗?
标签: node.js mongodb express mongoose