环回:人们把观察者放在哪里?

时间:2016-01-28 20:48:42

标签: node.js loopbackjs

我对环回游戏相对较新。我怎样才能让观察者工作?

例如,无论何时更改用户信息或创建用户,我都希望观察到某些内容。

由于

//this observer will be activated whenever the user is edited or created
User.observe('after save', function(ctx, next) {
    var theUserObject = ctx.instance;
    if(ctx.isNewInstance){
        anotherModel.create(theUserObject.name,theUserObject.ID);
    }else{
        anotherModel.update(theUserObject.name,theUserObject.ID);
    }
    next();
});

这是ctx的正确用户吗?这段代码应该放在哪里?在User.js中?

1 个答案:

答案 0 :(得分:2)

只是为了回答这个问题(见上面的评论):

一般来说,你所做的事情大多是正确的。您希望将operation hooks放在common/models/my-model.js文件中,但该上下文对象(ctx)将根据挂钩而更改(请阅读上面的链接文档)。

在您的情况下,要创建新模型,您需要访问当前模型的app,然后执行create(),但请确保将next()回调放入创建调用的回调:

//this observer will be activated whenever the user is edited or created
User.observe('after save', function(ctx, next) {
    var theUserObject = ctx.instance;
    if(ctx.isNewInstance){
        User.app.models.anotherModel.create({name: theUserObject.name, id: theUserObject.ID}, function(err, newInstance) {
            next(err);
        });
    } else {
        User.app.models.anotherModel.find({ /* some criteria */ }, function(err, instance) {
            if (err) { return next(err); }
            if (instance) {
                instance.updateAttributes({name: theUserObject.name, id: theUserObject.ID}, function(err) {
                    next(err);
                });
            }

        });
    }
});