Отношения не существует - ошибка в JugglingDB с адаптером Postgres

Я использую Node с Express и перемещаю свой ORM из Mongoose (Mongo) в JugglingDB (Postgres), и мне трудно заставить JugglingDB использовать простую схему, которую я определил.

Моя схема выглядит следующим образом:

var UserToken = schema.define('UserToken', {
  token: {type: String, index: true}
}, {
  tablename: 'user_token'
});

var User = schema.define('User', {
  email: {type: String, required: true, index: true},
  password_hash: String,
  first_name: String,
  last_name: String,
  role: {type: String, required: true, default: 'member'},
  language: {type: String, default: 'en'},
  api_key: String,
  active: {type: Boolean, required: true, default: true},
  confirmed: Date,
  created: {type: Date, default: function() { return new Date() }},
  modified: Date
}, {
  tablename: 'users'
});

UserToken.belongsTo(User, {as: 'user', foreignKey: 'userId'});

// Define the schema in the DB if it is not there
schema.isActual(function(err, actual) {
  if (!actual) {
    schema.autoupdate();
  }
});

Я получаю следующую ошибку при попытке запустить узел:

{ [error: relation "UserToken" does not exist]
  name: 'error',
  severity: 'ERROR',
  code: '42P01',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  file: 'namespace.c',
  line: '407',
  routine: 'RangeVarGetRelidExtended' }
{ [error: relation "User" does not exist]
  name: 'error',
  severity: 'ERROR',
  code: '42P01',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  file: 'namespace.c',
  line: '407',
  routine: 'RangeVarGetRelidExtended' }

Можете ли вы дать мне знать, что мне не хватает? Спасибо за любую помощь!

2 ответа

Укажите имя таблицы, используя свойство таблицы, например так:

var Organization = schema.define('Organization', {
  name: String,
  slug: String,
  link: String
}, {
  table: 'organizations'
});

Для любой схемы PostgreSQL, определенной через JugglingDB, она должна быть перенастроена или автоматически обновлена. Функция автомиграции уничтожает таблицу, если она существует, и воссоздает ее. Функция автообновления изменяет таблицу.

В вашем случае вы захотите выполнить следующее после определения вашей схемы:

schema.autoupdate (); // или выполнить миграцию

Поскольку automigrate и autoupdate по своей природе асинхронны, нельзя получить доступ к таблице до ее создания. В этом случае вы можете использовать модуль q или механизм обратного вызова для решения этой проблемы. Фрагмент кода, использующий решение модуля q, показан на:

(Пожалуйста, отметьте это, если это поможет:)) https://gist.github.com/woonketwong/7619585

Следовательно, запрос на извлечение был отправлен в JugglingDB. Исправление обновило свое описание спецификации при переносе схемы PostgreSQL (и настройке атрибутов в таблице). Запрос был принят и объединен с главным репо по адресу:

https://github.com/1602/jugglingdb/commit/5702d41e2cca2383715ad6b7263b25b7da2f181c

Другие вопросы по тегам