TypeError: Невозможно прочитать свойство 'length' из неопределенного при создании модели - PullRequest
0 голосов
/ 07 октября 2019

Я создаю модель и контроллер для выполнения некоторых финансовых транзакций, таких как дебет и кредит.

Когда я пытаюсь «создать» с использованием метода <model>.create, он возвращает мне следующую ошибку:

(node:5192) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'length' of undefined
    at Transaction._initValues (/Users/username/Documents/Projetos/projectname/node_modules/sequelize/lib/model.js:140:49)

Исходный код контроллера:

import * as Yup from 'yup';
import Transaction from '../models/Transaction';

class TransactionController {
  async store(req, res) {
    const schema = Yup.object().shape({
      id_user: Yup.number().required(),
      id_category: Yup.number().required(),
      id_wallet: Yup.number(),
      title: Yup.string()
        .min(6)
        .max(32)
        .required(),
      description: Yup.string(),
      amount: Yup.number()
        .round('floor')
        .moreThan(0)
        .positive()
        .required(),
      is_credit: Yup.bool()
        .required()
        .default(true),
    });
    if (!(await schema.isValid(req.body))) {
      return res.status(400).json({
        error:
          'Validation failed, see documentation for insert new transaction',
      });
    }
    const {
      id_user,
      id_category,
      id_wallet,
      title,
      description,
      amount,
      is_credit,
    } = await Transaction.create(req.body).catch(error => {
      console.log('error', error);
    });
    return res.json({
      id_user,
      id_category,
      id_wallet,
      title,
      description,
      amount,
      is_credit,
    });
  }
}

export default new TransactionController();

И база модели:

class Transaction extends Model {
  static init(sequelize) {
    super.init(
      {
        id_user: Sequelize.INTEGER,
        id_category: Sequelize.INTEGER,
        id_wallet: Sequelize.INTEGER,
        title: Sequelize.STRING,
        description: Sequelize.STRING,
        amount: Sequelize.DECIMAL(10, 2),
        is_credit: Sequelize.BOOLEAN,
      },
      {
        sequelize,
      }
    );
    return this;
  }

  /* static associate(models) {
                  this.belongsTo(models.File, { foreignKey: 'avatar_id', as: 'avatar' });
                } */

  static associate(models) {
    this.belongsTo(models.User, { foreignKey: 'id_user', as: 'id' });
  }
}

export default Transaction;

Я не могу понять, что означает length, потому что япроверяю тело с помощью YUP и пытаюсь вставить, используя все значения внутри JSON BODY.

Может кто-нибудь мне помочь, пожалуйста?

Заранее спасибо,

...