首先,如果您不熟悉变更流,请阅读this。
似乎在使用lb
架设应用程序时,会自动为模型创建一个变更流终结点。我已经成功实现了一个变更流,在向我的Statement
模型提交新模型实例时,这些变更将实时发送到所有连接的客户端。效果很好。
除了仅发送modelInstance
模型的Statement
。我还需要对提交该语句的用户有所了解。由于Statement
与我的用户模型具有hasOne
关系,因此我通常会使用includes
过滤器进行查询。但是我不是在这里查询...这不是变更流的工作方式。节点服务器将信息发送到客户端,而无需先查询该信息。
我的问题是,如何挂接Statement模型中的传出变更流,以便可以从用户模块中提取所需的数据?像这样:
module.exports = function(Statement) {
Statement.hookChangeStream(function(ctx, statementInstance, cb) {
const myUser = Statement.app.models.myUser
myUser.findOne({ 'where': { 'id': statementInstance.userId } }, function(err, userInstance) {
if (err !== undefined && err !== null) cb(err, null);
// strip sensitive data from user model
cleanUserInstance = someCleanerFunc(userInstance);
// add cleaned myUser modelInstance to Statement modelInstance
statementInstance.user = cleanUserInstance;
cb(null, true);
}
});
}
可以做到吗?如果可以,怎么办?