Прежде всего, если вы не знакомы с потоками изменений, прочитайте это .
При использовании 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);
}
});
}
Можно ли это сделать?Если да, то как?