Как правильно использовать MongoDB для хранения пользовательских моделей Strongloop?

Я новичок в Strongloop и новичок в MongoDB. Так много кривых обучения происходит прямо сейчас.

Моя основная проблема заключается в том, что я переключил источник данных модели пользователя (models.json) с коннектора памяти на коннектор loopback-connector-mongodb, и я больше не получаю userId при звонке / входе в систему. Я получаю обратно доступ, но идентификатор пользователя равен нулю. Если я вернусь к разъему памяти, я получу userId равный 1 или что-то еще.

Кажется, я помню, что где-то читал, если я не предоставлю идентификатор, Strongloop добавит его для меня. Это только для хранилища данных в памяти? Мне нужно сделать что-то особенное, раз уж это монго?

Нужно ли мне также переключить модель accessToken на mongo (я только что подумал об этом)?

Благодарю.


person huxley    schedule 10.07.2014    source источник
comment
На какой у вас версии? Недавно мы исправили похожую проблему. См. github.com/strongloop/loopback/issues/353.   -  person Raymond Feng    schedule 11.07.2014
comment
Мой клиент SL - v2.5.5 (узел v0.10.29).   -  person huxley    schedule 11.07.2014
comment
Также мой жонглер - v1.6.3.   -  person huxley    schedule 11.07.2014
comment
@RaymondFeng Окончательное решение, представленное в ссылке на проблему 353, у меня не сработало (добавлялось отношение к модели accessToken). Замечу, что кроме переключения свойства dataSource я не трогал файл models.json по умолчанию из эшафота.   -  person huxley    schedule 11.07.2014


Ответы (1)


Здесь вы столкнулись с крайним случаем: user и accessToken поддерживаются двумя разными типами БД. MongoDB использует ObjectID в качестве ключа по умолчанию, в то время как база данных памяти использует число.

accessToken расширяется от базового AccessToken. Он наследует отношение ownTo к базовой модели User. Тип userId установлен на число. Чтобы решить эту проблему, вы можете либо убедиться, что модель accessToken подключена к mongodb, либо добавить следующее отношение в models.json.

  "accessToken": {
    "dataSource": "db",
    "public": true,
    "options": {
      "base": "AccessToken",
      "relations": {
        "user": {
          "model": "user",
          "type": "belongsTo",
          "foreignKey": "userId"
        }
      }
    }
  },
person Raymond Feng    schedule 11.07.2014
comment
Когда я добавил «Relations» из ссылки на проблему, для параметра foreignKey по-прежнему было установлено значение «ID». Изменив его на userId, у меня все заработало. Я не уверен, что понимаю здесь крайний случай. Переключение пользовательской модели на реальное хранилище данных могло бы показаться очень распространенным вариантом использования (я также переключил accessToken на mongodb). Не следует ли скаффолду добавлять это отношение ownTo? Похоже, он будет работать либо с памятью, либо с mongodb. Это ломает коннектор Oracle или что-то в этом роде ?? Но это другой вопрос ;-) Спасибо за помощь! - person huxley; 12.07.2014