0

我使用 express.js 和猫鼬作为 ODM。

我知道提到当其他服务对 mongoDB 进行更新时,猫鼬不承认这一点。所以仍然显示数据库的旧状态。

我认为这是因为 mongoose 在创建、更新新文档后使用回调进行更新,但是当另一个服务与 mongoDB 交互时,不会触发此回调。

那么我怎么能手动说猫鼬照顾不是自己创建的文件呢?

路线/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);
    });
};

应用程序.js

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

当我现在使用 curl 或浏览器访问 /users 时,我得到了 mongodb 中所有用户的数组。直到现在都是这样。现在我在我的 PHP 环境中注册了一个新用户。当我现在再次请求 /users 时,我仍然得到与以前相同的数组,而没有通过 php 创建的用户!

当我现在重新启动节点服务并再次请求 /users 时,由 php 创建的用户就在那里......

4

1 回答 1

0

express.js 框架包括默认为生产站点启用的视图缓存)。我怀疑你的结果被缓存了,因为你包含了一个函数引用(user.list)而不是一个闭包,例如:

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

视图缓存是一个全局设置,应该只缓存视图模板,而不是视图的内容。有人要求更精细的缓存,但看起来这不是必需的。

您可以尝试使用以下方法禁用视图缓存:

app.disable('view cache');

Express.js Google Group是搜索或要求澄清的好资源。

于 2012-06-28T05:19:26.227 回答