@D_E_S

Как в sequelize Model использовать VIRTUAL с get и set?

Добрый день. Есть подключение запросы работают. Не могу понять что не так с данными. Таблица users уже была написана, в ней нет acl есть только pageaccess в виде строки. Проблема что если смотреть дебаг во время формирования то acl выходит с верными данными но если после смотреть ures то acl хранит неверные данные. В какой момент вызывается acl и надо ли делать map чтобы получить массив со всеми данными?
Запрос:
let ures = await Users.findAll({ where: {deleted: '0'}}).then(function (items) {
                    return items.map(x=>{
                        var item = x.dataValues;
                        item.acl = x.acl;
                        return item;
                    });
                });

Модель:
var Table:UserModel = ORM.define('users', {
    id: {
        type: DataTypes.UUID,
        primaryKey: true,
        autoIncrement: true
    },
    acl: {
        allowNull: false,
        type: DataTypes.VIRTUAL,
        get: function () {
            var pageaccess = this.getDataValue('pageaccess');
            var result = defaultObject;
            if (!pageaccess || pageaccess == 'null'){
                defaultOk.forEach(k => result[k] = true);
            } else {
                pageaccess.split(/,/).forEach(x => result[x] = true);
                return result;
            }
        },
        set: function (val) {
            var acl = val;
            var pageaccess = Object.keys(acl).filter(k=>acl[k]).join(',');
            this.setDataValue('pageaccess', pageaccess);
        }
    },
    pageaccess: {
        type: DataTypes.STRING,
    },
    deleted: {
        type: DataTypes.INTEGER,
    }
},{
    getterMethods   : {},
    setterMethods   : {},
    classMethods: {
        setAcl: function(key: string, value: boolean) {
            if (!this._acl) var q = this.acl;
            this._acl[key] = value;
            this.pageaccess = Object.keys(this._acl).filter(k=>this._acl[k]).join(',');
        }
});

export var Users = Table;
  • Вопрос задан
  • 410 просмотров
Пригласить эксперта
Ответы на вопрос 1
@emp1re
let ures = await Users.findAll({ where: {deleted: '0'}}).then(function (items) {
                    return items.map(x=>{
                        var item = x.dataValues;
                        item.acl = x.acl;
                        return item;
                    });
                });

Users.findAll({ where: {deleted: '0'}}) возращает промисс котрый вы обрабатываете через then
все что вы внутри питаетесь вернуть никуда не вернеться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы