Как переопределить базового пользователя в проекте, построенном с обратной связью Strongloop?

#javascript #loopbackjs #strongloop

#javascript #loopbackjs #strongloop

Вопрос:

Учитывая совершенно новый проект, созданный с:

$ slc lb project myapp

Как мне заменить модель ‘user‘ в models.json на модель ‘customer‘, размещенную в ./models каталоге? У клиентов должны быть методы входа / выхода и т.д., А «пользователи» не должны существовать как API. Кроме того, модель клиента не должна быть динамической. Давайте представим, что у клиента должна быть схема следующим образом:

  • Имя
  • Адрес электронной почты
  • Пароль
  • вопрос
  • ответ
  • телефон
  • проверено
  • Данные созданы

Я играл с этим пару дней, и мой Google-fu меня подводит. Любая помощь приветствуется. Спасибо.

Ответ №1:

Это идиоматический способ:

  1. В models.json переименуйте user в Customer .

  2. В models/customer.js добавьте пользовательские методы к модели, созданной с помощью models.json:

     var app = require('../app');
    var Customer = app.models.Customer;
    
    Customer.myfn = function(cb) {
      // etc.
      cb();
    };
      

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

Используйте strict для блокировки свойств:

 {
  "Customer": {
    "options": {
      "base": "User",
      "strict": true
    },
    "properties": {
      // define properties (schema)
    }
  }
}
  

Более подробную информацию см. в справочнике по определению модели.

Обновление на основе комментария под этим ответом

Можно создать код вашей модели — сначала см.customer.js в примере приложения LoopBack, которое было создано до models.json появления.

Вот что вы должны сделать в своем коде:

 var app = require('../app');

var Customer = module.exports = loopback.createModel(
  'Customer',
  {
    name: 'string',
    // and all other more properties
  },
  {
    base: 'User',
    strict: true
  }
);

app.model(Customer);
  

Это в основном тот же код, который выполняется app.boot для всех записей в models.json . Он должен добавить знакомые маршруты REST в ваше приложение: GET /customers , POST /customers/login , POST /customers/logout и т.д.

Очень сложно помочь вам, не видя вашего кода, который не работает, и не зная, что именно вы подразумеваете под «не работает».

Комментарии:

1. Спасибо за ответ. Это работает, но в конечном итоге это не то, что я искал. На самом деле я ничего не имею против использования models.json, однако в качестве инструмента обучения я хотел попробовать полностью отделить эту модель клиента от models.json. В моих собственных начальных попытках я поместил customer.js и файлы customer.json в папке /models, которые дали мне хорошие конечные точки CRUD rest, однако им не хватало /login соуса (я использовал base: user свойство для customer). Может быть, я просто неправильно задаю свой вопрос, или, может быть, ответ таков; не делайте этого, приведенный выше метод — это способ сделать это.

2. Извините, я не получил уведомления о том, что этот ответ был обновлен. Да, сначала код — это то, что мне было нужно. В конце концов я добрался туда, и это в основном соответствует тому, что у вас есть выше. Технически на этот вопрос дан ответ, но мой логин клиента не работает. Когда я отправлял в /customer/login мой результат, у него были id, ttl и userId . Поскольку FK должен быть CustomerID, я не могу использовать предоставленный accessToken. Я думаю, что отмечу завершение и задам его как новый вопрос. Спасибо за вашу помощь.