Почему мой источник данных не переключается с 'memory db' на MySQL в LoopBack 4? - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь выучить LoopBack 4, поэтому я делаю учебные примеры, которые они приводят в официальных документах. Я хочу изменить источник данных примера todoList с 'In-memory db' для 'MySQL', но я не добился успеха, даже если я думаю, что это так тривиально.

Вот часть кода, который у меня есть.

todo.repository.ts

export class TodoRepository extends DefaultCrudRepository<
  Todo,
  typeof Todo.prototype.id
  > {
  constructor(
    @inject('datasources.db') dataSource: MysqldbDataSource,
  ) {
    super(Todo, dataSource);
  }
}

TODO-list.repository.ts

export class TodoListRepository extends DefaultCrudRepository<
  TodoList,
  typeof TodoList.prototype.id
  > {

  public readonly todos: HasManyRepositoryFactory<
    Todo,
    typeof TodoList.prototype.id
  >;
  constructor(
    @inject('datasources.db') dataSource: MysqldbDataSource,
    @repository.getter(TodoRepository)
    protected todoRepositoryGetter: Getter<TodoRepository>,
  ) {
    super(TodoList, dataSource);
    this.todos = this.createHasManyRepositoryFactoryFor(
      'todos',
      todoRepositoryGetter,
    );
  }
}

Насколько я понимаю, здесь код репозитория отвечает за соединение контроллера с фактическими данными, затем я заменяю код и меняю его там, где написано от DbDataSource до MysqldbDataSource, как я покажу вам в приведенном выше коде. .

В любом случае, я продолжаю хранить данные в data / db.json (где «in-memory db» размещает данные) вместо того, чтобы извлекать данные из фактической базы данных MySQL. Любая помощь приветствуется.

EDIT:

Вот мой конфиг для соединения с базой данных MySQL

TODO-list.repository.ts

{
  "name": "mysqldb",
  "connector": "mysql",
  "url": "mysql://root:123456@localhost/todo",
  "host": "localhost",
  "port": 3306,
  "user": "root",
  "password": "123456",
  "database": "todo"
}

1 Ответ

0 голосов
/ 02 апреля 2019

Ну, это было очень просто, как я и предполагал с самого начала.Мне просто нужно было поменять имя @inject на todo.repository.ts и todo-list.repository.ts, например:

@inject('datasources.mysqldb') dataSource: MysqldbDataSource

Клянусь, я сделал это вчера вечером перед сном, но не сработало.Сегодня я просто создаю новые репозитории из CLI LB, и это действительно сработало.Может быть, я был слишком сонным вчера ...

...