Как вернуть только определенные атрибуты при использовании метода Sequelize Create - PullRequest
0 голосов
/ 28 февраля 2019

Я искал в документации и форумах Sequelize правильный синтаксис, и, похоже, я делаю это правильно, но по какой-то причине поле пароля все еще возвращается в полезной нагрузке ответа ...

Следующая ссылка показывает, что атрибуты исключают синтаксис, который я использую, был добавлен в версии 3.11 Sequelize: https://github.com/sequelize/sequelize/issues/4074

Кто-нибудь знает, что мне здесь не хватает?Ниже приведен метод Create и журнал консоли из оператора Insert.

Create метод

async create(req, res) {
try {
    let user = await User.create({
        firstName: req.body.firstName,
        lastName: req.body.lastName,
        email: req.body.email,
        password: req.body.password
    }, {
        attributes: {
            exclude: ['password']
        }
    });

    console.log("USER: ", user);

    res.status(201).send(user.toJSON());
}
catch (error) {
    res.status(500).send(error)
};

}

Журнал консоли

Выполнение (по умолчанию): INSERT INTO "Users" ("id", "firstName", "lastName", "email", "password", "madeAt""," updatedAt ") ЗНАЧЕНИЯ (ПО УМОЛЧАНИЮ, 'Джеймс', 'Мартино', 'test@gmail.com', '$ 2b $ 10 $ 7ANyHzs74OXYfXHuhalQ3ewaS4DDem1cHMprKaIa7gO434rlVLKp2', '2019-02-28 +00: 2019-02-28 +00: 2019-02-28 + 18: 2019-02-28 +00: 2019-02-28 + 18: 2019-02-28 + 18: 2019-02-28 + 18: 2019-02-28 + 18: 2019-02-28 + 18: 2019-02-28 + 18: 2019-02-28 + 18: 2019-02-28 + 18: 2019-02-28 + 18: 2019-02-28, '2019-02-28 15: 18: 15.856 +00: 00') ВОЗВРАЩЕНИЕ *;

ПОЛЬЗОВАТЕЛЬ: Пользователь {dataValues: {id: 6, firstName: 'James', lastName: 'Martineau',электронная почта: 'test@gmail.com', пароль: '$ 2b $ 10 $ 7ANyHzs74OXYfXHuhalQ3ewaS4DDem1cHMprKaIa7gO434rlVLKp2', обновлено: 2019-02-28T15: 18: 15.856Z, создано: 2019-02-28T15: 18: 8,8: 15: 8,81025 *

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Я вижу в документе , что вы не можете исключить атрибуты, когда создаете модель.Исключите только, когда вы найдете модель.

Я предлагаю:

async create(req, res) 
{
try {
    let user = await User.create({
        firstName: req.body.firstName,
        lastName: req.body.lastName,
        email: req.body.email,
        password: req.body.password
    });
    delete user["password"];//delete field password
    console.log("USER: ", user);

    res.status(201).send(user.toJSON());
}
catch (error) {
    res.status(500).send(error)
};
}
0 голосов
/ 13 марта 2019

 User.create(req.body).then(user => {
    delete user.dataValues.password
    res.json(user)
  }).catch(error => {
   // do something with error
  })
0 голосов
/ 28 февраля 2019

При быстром чтении документов кажется, что attributes упоминается только в таких запросах, как:

Model.findAll({
  attributes: { exclude: ['baz'] }
});

(http://docs.sequelizejs.com/manual/tutorial/querying.html#attributes)

Если вы хотите исключить passwordс create вы можете сделать что-то вроде:

let user = await User.create({
    firstName: req.body.firstName,
    lastName: req.body.lastName,
    email: req.body.email,
    password: req.body.password
}, {
    fields: ['firstName', 'lastName', 'email']
});

(http://docs.sequelizejs.com/manual/tutorial/instances.html#creating-persistent-instances)

...