Перенос встроенных моделей в базы данных

Как переместить встроенные модели, такие как User, Roles, User-Role-Mapping и т. д., в базу данных, которую мы создали вместо источника данных по умолчанию: db? Встроенные модели не отображаются в Arc.

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

Пожалуйста, совет... Я сидел на нем в течение нескольких недель. Спасибо


person Anoop.P.A    schedule 30.04.2015    source источник


Ответы (1)


Источник данных по умолчанию "db" помещается в память. Вот почему ваши данные не сохраняются после перезапуска приложения. Вам нужно установить соответствующий коннектор базы данных, а затем добавить источник данных для вашей базы данных внутри server/datasources.js.

http://docs.strongloop.com/display/public/LB/Connecting+models+to+data+sources

Если вы создали приложение с помощью команды «slc loopback», то ваш источник данных содержит только разъем памяти. Проверьте файл datasources.js, и вы увидите что-то вроде этого:

{
  "db": {
  "name": "db",
  "connector": "memory"
  }
}

Если вы хотите сохранить свои данные, например, в базе данных postgresql (процесс почти одинаков для любого поддерживаемого коннектора), вам необходимо расширить файл datasoruces.json с информацией о вашей базе данных:

{
  "db": {
  "name": "db",
  "connector": "memory"
  },

  "mydata": {
    "host": "db_host",
    "database": "your_database_name",
    "username": "your_db_username",
    "password": "your_db_password",
    "connector": "postgresql"
  }
}

Вы также можете сделать это с помощью команды «slc loopback: datasource». Мастер поможет вам определить ваш источник данных. Не забудьте установить db-коннектор.

npm install loopback-connector-postgresql

Последнее, что нужно сделать, это назначить источник данных нужным моделям. Вы можете сделать это с помощью мастера (см. команду slc loopback:model) или отредактировать файл server/model-config.json вручную.

{
  "User": {
    "dataSource": "mydata",
    "public": true
  },
  "AccessToken": {
    "dataSource": "mydata",
    "public": false
  },
  "ACL": {
    "dataSource": "mydata",
    "public": false
  },
  "RoleMapping": {
    "dataSource": "mydata",
    "public": false
  },
  "Role": {
    "dataSource": "mydata",
    "public": false
  }
}

ОБНОВЛЕНИЕ Вы можете попробовать этот фрагмент кода, чтобы обновить свои таблицы из моделей. Поместите его код где-нибудь в server/server.js

var appModels = ['User', 'AccessToken', 'ACL', 'RoleMapping', 'Role'];

var ds = app.dataSources.mydata;
ds.isActual(appModels, function(err, actual) {
  if (!actual) {
    ds.autoupdate(appModels, function(err) {
      if (err) throw (err);
    });
  }
});

Я бы порекомендовал вам прочитать о создании/обновлении схемы базы данных из моделей на странице strongloop. Обратите внимание на разницу между функциями автообновления и автомиграции

http://docs.strongloop.com/display/public/LB/Creating+a+database+schema+from+models

person A.Z.    schedule 04.05.2015
comment
Спасибо за ваш ответ. Я уже пробовал то же самое. Только одна проблема: я не могу перенести это в базу данных. Я пробовал использовать команду Arc и cli. - person Anoop.P.A; 10.05.2015
comment
Можете ли вы объяснить более подробно, что вы пробовали? - person A.Z.; 11.05.2015
comment
Я обновил ответ с некоторым кодом и ссылкой на документы, где вы можете узнать больше об обновлении схемы из моделей. - person A.Z.; 11.05.2015
comment
О, круто! Это сработало. Я вставил код в ваше обновление, и это сработало. - person Anoop.P.A; 11.05.2015
comment
Что делать, если мне нужно создать миграции в разных моделях одновременно, а результатом одной миграции являются новые записи в другой миграции? это реальный сценарий, когда результат миграции должен быть вставлен в другую таблицу как связанная модель. например, вы вставляете нового пользователя, а возвращаемый идентификатор представляет собой новый реестр для таблицы подписок, в которой есть план подписки и идентификатор пользователя. например, как это будет выглядеть? - person Luis Parada; 19.07.2016
comment
@LuisParada Миграция, как обсуждается здесь, касается миграции схемы базы данных. Вы должны задать другой вопрос о создании/миграции данных. - person A.Z.; 20.07.2016