SequelizeDatabaseError: отношение "пользователи" не существует в Koa. js framework - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть две модели user и acessToken, и я пытаюсь построить взаимосвязь между этими двумя таблицами, но я получаю сообщение об ошибке.

Модели приведены ниже: -

  1. Модель пользователя: -

const { hashPassword } = require('../utils');

module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define('user', {
        username: {
            type: DataTypes.STRING,
            allowNull: false,
            primaryKey: true
        },
        email: {
            type: DataTypes.STRING,
            allowNull: false,
            validate: {
              isEmail: true
            }
        },
        password: {
            type: DataTypes.STRING,
            allowNull: false
        },
        role: {
            type: DataTypes.ENUM,
            values: ['admin', 'user'],
            allowNull: false,
            defaultValue: 'user'
        }
    },
    {
        hooks: {
          beforeCreate: user =>
            hashPassword(user).then(hash => {
              user.password = hash; // eslint-disable-line no-param-reassign
            })
        }
    });
    User.associate = models => {
        models.user.hasMany(models.accessToken);
    };
    return User;
};
accessToken Модель: -

const crypto = require('crypto');

module.exports = (sequelize, DataTypes) => {
  const AccessToken = sequelize.define('accessToken', {
    username: {
      type: DataTypes.STRING,
      allowNull: true
    },
    token: {
      type: DataTypes.STRING,
      allowNull: false,
      defaultValue: function defaultValue() {
        return crypto
          .randomBytes(48)
          .toString('base64')
          .replace(/\//g, '_')
          .replace(/\+/g, '-');
      }
    }
  });

  AccessToken.associate = models => {
      console.log('models =>', models);
    models.accessToken.belongsTo(models.user);
  };
  return AccessToken;
};

Я пытаюсь вставить данные в эти две модели, как показано ниже: -

try {
      userData = await models.user.create({ username, email, password });
    } catch (e) {
      return ctx.throw(500, `creating user failed! :( ${e}`, e);
    }

    try {
      tokenData = await models.accessToken.create({ username });
    } catch (e) {
      return ctx.throw(500, `creating accessToken failed! :( ${e}`);
    }

, поэтому я получаю следующее сообщение об ошибке: -

Executing (default): INSERT INTO "users" ("username","email","password","role","createdAt","updatedAt") VALUES ($1,$2,$3,$4,$5,$6) RETURNING *;

  SequelizeDatabaseError: relation "users" does not exist
      at Query.formatError (D:\Gaurav's-Stuff\authentication-service\node_modules\sequelize\lib\dialects\postgres\query.js:366:16)
      at query.catch.err (D:\Gaurav's-Stuff\authentication-service\node_modules\sequelize\lib\dialects\postgres\query.js:72:18)
      at tryCatcher (D:\Gaurav's-Stuff\authentication-service\node_modules\bluebird\js\release\util.js:16:23)
      at Promise._settlePromiseFromHandler (D:\Gaurav's-Stuff\authentication-service\node_modules\bluebird\js\release\promise.js:547:31)
      at Promise._settlePromise (D:\Gaurav's-Stuff\authentication-service\node_modules\bluebird\js\release\promise.js:604:18) 
      at Promise._settlePromise0 (D:\Gaurav's-Stuff\authentication-service\node_modules\bluebird\js\release\promise.js:649:10)      at Promise._settlePromises (D:\Gaurav's-Stuff\authentication-service\node_modules\bluebird\js\release\promise.js:725:18)      at _drainQueueStep (D:\Gaurav's-Stuff\authentication-service\node_modules\bluebird\js\release\async.js:93:12)
      at _drainQueue (D:\Gaurav's-Stuff\authentication-service\node_modules\bluebird\js\release\async.js:86:9)
      at Async._drainQueues (D:\Gaurav's-Stuff\authentication-service\node_modules\bluebird\js\release\async.js:102:5)        
      at Immediate.Async.drainQueues [as _onImmediate] (D:\Gaurav's-Stuff\authentication-service\node_modules\bluebird\js\release\async.js:15:14)
      at runCallback (timers.js:705:18)
      at tryOnImmediate (timers.js:676:5)
      at processImmediate (timers.js:658:5)

Может кто-нибудь сказать мне, где я делаю неправильно, я не могу определить ошибка.

1 Ответ

0 голосов
/ 28 февраля 2020

Попробуйте добавить это, если у вас есть хуки в вашей пользовательской модели ...

freezeTableName: true,
tableName: 'user',
...