0

ODMとしてmongooseでexpress.jsを使用しています。

他のサービスが mongoDB を更新すると、mongoose はこれを認識しないことを知っています。そのため、データベースの古い状態が引き続き表示されます。

これは、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);
    });
};

app.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 グループです。

于 2012-06-28T05:19:26.227 に答える