#javascript #loopbackjs #strongloop
#javascript #loopbackjs #strongloop
Вопрос:
Учитывая совершенно новый проект, созданный с:
$ slc lb project myapp
Как мне заменить модель ‘user‘ в models.json
на модель ‘customer‘, размещенную в ./models
каталоге? У клиентов должны быть методы входа / выхода и т.д., А «пользователи» не должны существовать как API. Кроме того, модель клиента не должна быть динамической. Давайте представим, что у клиента должна быть схема следующим образом:
- Имя
- Адрес электронной почты
- Пароль
- вопрос
- ответ
- телефон
- проверено
- Данные созданы
Я играл с этим пару дней, и мой Google-fu меня подводит. Любая помощь приветствуется. Спасибо.
Ответ №1:
Это идиоматический способ:
-
В
models.json
переименуйтеuser
вCustomer
. -
В
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. Я думаю, что отмечу завершение и задам его как новый вопрос. Спасибо за вашу помощь.