Nodejs с sequelize возвращает ошибку при запуске обновления - PullRequest
0 голосов
/ 09 января 2020

У меня есть эта функция обновления в пользовательском контроллере:

  async update(req, res) {
    const schema = Yup.object().shape({
      name: Yup.string().required(),
      email: Yup.string().email(),
      oldPassword: Yup.string().min(6),
      password: Yup.string()
        .min(6)
        .when('oldPassword', (oldPassword, field) =>
          oldPassword ? field.required() : field
        ),
       confirmPassword: Yup.string().when('password', (password, field) =>
         password ? field.required().oneOf([Yup.ref('password')]) : field
       ),
    });

    if (!(await schema.isValid(req.body))) {
      return res.status(400).json({ error: 'Validação de entrada falhou' });
    }
    const { email, oldPassword } = req.body;
    console.log(email);
    const user = await User.findByPk(req.userId);
    if (email && email !== user.email) {
      const userExists = await User.findOne({ where: { email } });

      if (userExists) {
        return res.status(400).json({ error: 'E-mail já cadastrado' });
      }
    }

    if (oldPassword && !(await user.checkPassword(oldPassword))) {
      return res.status(401).json({ eror: 'As senhas não são iguais' });
    }

    const { id, name, provider } = await User.update(req.body);
    return res.json({
      id,
      name,
      email,
      provider,
    });
  }

При запуске node js возвращает мне следующее предупреждение об ошибке, что у меня отсутствует параметр:

(node:2608) UnhandledPromiseRejectionWarning: AssertionError [ERR_ASSERTION]: Missing where attribute in the options parameter
    at Function._optionsMustContainWhere (D:\Estudos\Rocketseat\BootCamp\Módulo 02\backend-gobarber2\node_modules\sequelize\lib\model.js:3427:5)    
    at Function.update (D:\Estudos\Rocketseat\BootCamp\Módulo 02\backend-gobarber2\node_modules\sequelize\lib\model.js:3053:10)
    at update (D:\Estudos\Rocketseat\BootCamp\Módulo 02\backend-gobarber2\src\app\controllers\UserController.js:95:57)

Может кто-то подскажите, что я делаю не так?

  • bcrypt js: 2.4.3
  • express: 4.17.1
  • jsonwebtoken: 8.5.1
  • Multer: 1.4.2
  • pg: 7.17.0
  • pg-hstore: 2.3.3
  • sequelize: 5.21.3
  • yup ": 0.28.0

1 Ответ

1 голос
/ 10 января 2020

Вы забыли, где атрибут. Пользователь будет обновляться, но какой пользователь? Вам нужно изменить здесь;

const { id, name, provider } = await User.update(req.body);

вот так;

const { id, name, provider } = await User.update(req.body, {
   where: {? : ?}
});
...