Отношения не существует - ошибка в 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