[МУЗЫКА]
В предыдущем упражнении мы получили наши серверы loopback до определенного этапа.
Теперь мы можем подключить наши серверы loopback к базе данных mongolab, база
данных, выступающая в качестве источника данных для наших серверов loopback.
Мы также определяем списки контроля доступа для контроля доступа к радиусу,
остальные здесь, частично с нашим сервером замыкания на себя.
В этом упражнении мы рассмотрим отношения замыкания на себя.
Теперь мы можем определить модели и определить отношения между моделями.
Так, например, возьмем пример комментария.
Когда вы оставляете комментарий о блюде, комментарий связан с блюдом.
Комментарий принадлежит блюду.
Аналогично, комментарий публикуется конкретным пользователем.
Таким образом, комментарий относится к отношениям с этим конкретным пользователем.
Теперь, когда вы смотрите на отношения в обратном направлении,
блюдо может иметь несколько комментариев, связанных с ним, и
, аналогичным образом, пользователь может опубликовать несколько комментариев.
Таким образом, это самые большие виды отношений, которые вы можете определить между
различными моделями в нашем сервере loopback.
Также мы рассмотрим использование смешанной петли,
которая позволяет нам добавлять дополнительные свойства к нашим моделям.
В конце этого упражнения у вас будет довольно полный сервер loopback,
который мы можем затем подключиться к нашему угловому клиенту и
иметь возможность использовать его в качестве бэк-энда для нашего углового клиента.
Чтобы продолжить упражнение, в папке сервера замыкания на
себя создадим новую модель для комментария.
Таким образом, эта модель будет определяться как
комментарий, и в этом случае эта модель также сохраняется
в MongoDB и будет как постоянная модель,
и мы будем выставлять комментарий через REST API и
папка модели находится в общей папке, и для
этого комментария мы будем иметь два свойства, связанные с это.
И первым свойством является рейтинг.
Который имеет тип Number.
Это обязательно и значение по умолчанию, я оставлю это как 5.
И вторым свойством будет Comment, который имеет строку типа.
Это обязательно, а значение по умолчанию пустое.
Таким образом, каждый комментарий будет иметь эти два свойства, рейтинг и комментарий,
связанные с ним.
Кроме того, нам нужно теперь определить связь между комментарием и
пользователем, который отправляет комментарий, а также комментарий и
блюдо, с которым связан этот комментарий.
Аналогичным образом, мы видели в предыдущем упражнении, что они добавили
свои избранные для пользователя.
Поэтому, чтобы определить избранное, позвольте мне снова определить модель,
и это имя модели является избранным, и это также сохраняется в MongoDB,
и это также PersistedModel, и
мы выставим любимое для остальных API и находится в общей папке.
Теперь сам любимый не нуждается в каком-либо конкретном свойстве, потому что все
любимое ассоциирует конкретного пользователя с этим конкретным блюдом.
Поэтому любимый здесь будет использоваться просто как мост между пользователем
и блюдом.
Таким образом, мы будем использовать любимое как способ определения отношений между
блюдом и пользователем.
Таким образом, он не имеет каких-либо конкретных свойств.
Итак, теперь мы добавили две модели в наш сервер loopback.
Теперь давайте начнем определять модельные отношения.
Теперь, как я объяснял ранее,
существуют различные типы модельных отношений, которые мы можем определить.
Начнем с определения взаимосвязи между блюдом и комментарием.
Итак, чтобы определить модель в loopback, скажем, lb отношение.
И когда отношения приходят,
нам нужно указать модель, из которой следует создать отношение.
Таким образом, в первую очередь, мы создадим связь между блюдом.
Таким образом, из блюд, и блюдо может иметь много комментариев, связанных с ним,
поэтому тип отношения имеет много и
связан с комментарием и именем свойства для отношения
я оставлю его по умолчанию с просто
комментарием с маленькой буквой c. конкретный пользовательский внешний ключ, если мы хотим.
Если мы этого не сделаем, loopback автоматически назначит внешний ключ,
который будет не чем иным, как комментариями и идентификатором, связанным с ним.
Таким образом, он оглянется назад, чтобы определить его автоматически.
Мы также можем иметь сквозные модели, которые в данном случае не применимы.
Сквозная модель позволит нам определить отношение к одной и другой модели
, и в этом случае у нас нет таких отношений, поэтому мы просто скажем «нет», и
мы не будем вставлять REST API, а также
отключим отношение от включения.
Итак, мы указали
, что отключение отношения от включения не является.
Позже вы поймете, почему это важно.
У нас был бы способ включения информации из одной
модели в другую, выполнив включение там.
Так что это то, чего мы просили не предотвращать.
Теперь аналогичным образом, мы можем определить следующую связь
между комментариями и блюдами.
Поэтому, когда вы определяете отношение к комментарию и блюдам,
позвольте мне сказать, что это отношение lb, и теперь мы определим связь между комментарием.
И так как комментарий может принадлежать только к конкретному
блюду, поэтому мы определим, что он принадлежит к отношениям, и это принадлежит
блюду здесь, и имя свойства для отношения будет блюда.
И мы не будем использовать пользовательский внешний ключ,
мы позволим использовать отношения в REST API.
На самом деле мы этого не хотим, поэтому я должен был ввести «нет» для этого,
но я просто пойду и отредактирую созданное отношение в моем коде.
Поэтому я могу войти в файл comment.jason и
просто изменить это с да на нет,
я сделаю это, потому что я не хочу, чтобы он был вложен дальше.
Так что позвольте мне пойти вперед и
внести изменения в комментарий под названием Джейсон, прежде чем я забуду это сделать.
А затем откройте комментарий под названием Джейсон.
И вы видите, что в комментарии под названием Джейсон у нас есть отношения здесь, а
потом я собираюсь вырезать это, потому что я не хочу, чтобы это было сделано.
Это ошибка, которую я сделал при вводе текста, поэтому я удалю это.
Следующая связь, которую я собираюсь определить, между комментарием и
клиентом.
Позвольте мне еще раз, введите lb отношение здесь.
Таким образом, мы определим связь между комментарием и клиентом.
Комментарий принадлежит клиенту, как мы ожидали,
и, Здесь позвольте мне явно
ввести, Пользовательский внешний ключ.
Я просто делаю это, чтобы показать вам, что я могу
определить конкретный внешний ключ здесь.
Я не буду гнездиться, и я не отключу здесь.
Итак, это отношения, которые я определяю между комментарием и
клиентом.
Далее, Позвольте мне определить отношения между клиентом и комментарием.
Поэтому здесь, от клиента, клиент имеет много комментариев,
и их имя собственности я буду вводить в качестве комментариев.
И затем я определяю внешний ключ как customerID.
И мне не нужна сквозная модель здесь, я не буду гнездиться и не отключу.
Так что теперь я определил все отношения между комментариями и
клиентом, и комментариями и посудой.
Теперь, то же самое, давайте поработаем над фаворитами.
Теперь, для фаворитов, Позвольте мне определить
отношения между блюдами и фаворитами.
Таким образом, блюдо могло быть избранным для многих пользователей,
поэтому у него много отношений с фаворитом.
И мы будем использовать фавориты там, и
нам не понадобится сквозная модель и нет и нет.
Итак, теперь мы определили, что у него много отношений между блюдом и
фаворитом.
Позвольте мне теперь определить отношения между любимым и блюдом.
Поэтому, чтобы определить отношения между
фаворитом и блюдом, позвольте мне сказать, что любимое принадлежит блюду, и
мы будем использовать блюда и никаких внешних ключей, не вложенных.
И мы не будем отключать отношения от включения.
Теперь мы должны определить отношения между
фаворитом и клиентом.
Таким образом, мы скажем, любимый принадлежит клиенту и,
Мы определим его внешний ключ как customerID.
Мы не допустим вложенность REST API и не будем отключать.
Теперь последние отношения, между клиентом и фаворитом.
Итак, теперь мы определим отношения между клиентом имеет много,
Избранное, и это,
я определяю CustomerID как внешний ключ, мне не нужна сквозная модель,
и я не позволю вложению, и я ничего не отключу.
Вот и все, мы определили все отношения, которые нам нужны
между комментариями и клиентами и посудой.
Между фаворитами, клиентами и блюдами.
Теперь давайте рассмотрим использование mixin.
Теперь этот mixin, который я собираюсь использовать с моим сервером Loopback,
является mixin, который добавляет временные метки ко всему, что сохраняется или обновляется.
Так что напомним, что в нашем Экспресс сервере, мы создали и
обновили при добавлении автоматически с помощью Mongoose.
Теперь для Loopback мне нужно использовать этот конкретный
mixin, называемый как Lookback ds timestamp mixin.
так что я должен сначала установить mixin в свой проект.
Поэтому я скажу, что npm install
loopback-ds-timestamp-mixin —save
и установите этот модуль узла.
И как только этот модуль узла установлен, так что, как вы можете видеть,
это номер версии 3.4.1, которую я использую.
Поскольку этот mixin установлен, мне нужно войти и
включить это использование mixin в моих моделях.
Для этого давайте перейдем к коду, в коде позвольте мне сначала открыть
этот конфликт модели смежный, который находится в папке сервера.
Поэтому в модели confi.json, если вы подниметесь сюда, вы увидите эти
mixins, определенные здесь.
Таким образом, у нас есть mixins от общего и loopback сервера.
Теперь я собираюсь добавить в новый mixin, который я только что добавил здесь.
Итак, этот миксин находится в.. /node_modules.
Таким образом, это находится в папке модулей узла прямо там.
/loopback-ds-timestamp-mixin.
Это позволяет моему серверу Loopback использовать этот mixin на моем сервере.
Теперь не только это, мне нужно указать для
всех моделей, где я хочу, чтобы этот mixin был включен.
Итак, я перейду сейчас в эту общую папку, и
в общей папке мы отредактируем этот файл comment.json и
в файле comment.json добавим в mixin.
Поэтому после свойств я добавлю в mixin как
синхронизацию внутри кавычек, вы скажете mixins.
:, И, там,
и внутри mixins мы увидим
TimeStamp, true.
То же самое мне нужно вставить в некоторые из других моделей, поэтому
позвольте мне просто скопировать это.
Таким образом, мы скажем, что mixins TimeStamp true в comments.json.
Затем мы пойдем на dishes.json, а
затем добавим это также к dishes.json, а
затем они перейдут в favorite.json, а
затем добавим в favorite.json.
Мы добавим его в readers.json, и
мы добавим его в promotions.json.
И сохраните все изменения.
Теперь мы настроим еще несколько списков контроля доступа, поэтому,
перейдя к терминалу, позвольте мне ввести lb acl, чтобы настроить некоторые списки контроля доступа.
Итак, здесь для блюд,
я буду указывать для всех методов и свойств право
Может быть сделано только пользователем с ролью admin.
Так что это первый контроль доступа, который я настраиваю для
посуды, затем я делаю то же самое для лидеров.
Все методы и свойства, запись, другие,
роль администратора явно предоставляют доступ.
Затем для рекламных акций также,
то же самое, все методы и
свойства, писать, и другие,
Роль явно предоставить доступ, потому что вы только хотите,
чтобы администратор мог вносить любые изменения в блюда, акции или лидеры.
Теперь для комментариев комментарии могут быть размещены любым зарегистрированным пользователем.
Поэтому для комментариев позвольте мне определить ACL для комментариев.
Мы скажем комментарий, все методы и
свойства, все типы, все пользователи,
явно запрещают доступ.
Потому что мы не хотим, чтобы они могли делать все это.
Теперь давайте откроем только некоторые операции, которые будут включены пользователями.
Поэтому для комментариев, всех методов и
свойств мы скажем операцию чтения.
Операцией чтения комментариев будет только аутентифицированный пользователь.
Таким образом, только пользователи, которые вошли в систему, смогут читать комментарии.
Теперь аналогичным образом, позвольте мне определить для,
Комментарии, один метод и
создать, кто может создавать комментарии?
Любой аутентифицированный пользователь, любой аутентифицированный пользователь может создавать комментарии.
Таким образом, мы явно предоставим им доступ, теперь,
последний для комментариев, Мы скажем для
комментария, все методы и свойства.
Написать, то есть, кому разрешено писать комментарий?
Только пользователь, владеющий этим объектом, может вносить изменения в комментарий.
Таким образом, только пользователь, который отправил комментарий, может внести изменения в комментарий,
либо отредактировать или удалить комментарий, так что это то, что мы позволим.
Тот же набор операций, давайте применим их к избранному.
Поэтому для избранного, так как мы не добавили
ни одного из элементов управления доступом, поэтому для избранного,
всех методов и свойств, всех типов,
всех пользователей, явно запрещают доступ там.
Для избранного мы определим для
всех методов и свойств, читать,
только для пользователя, владеющего этим объектом.
Таким образом, только пользователь может читать
свои собственные избранные, ни один другой пользователь не должен видеть свои собственные избранные.
Теперь третий - создание фаворитов,
поэтому для создания фаворитов, скажем для
фаворитов, один метод, create,
любой аутентифицированный пользователь может создать комментарий.
И последнее, для избранного, все методы и
свойства, операция записи, только для пользователя, владеющего этим объектом.
Таким образом, только пользователь, который ввел любимое для
себя, может редактировать или удалять эти избранные, вот и все.
Таким образом, мы теперь создали все элементы управления доступом и
все различные отношения для нашего приложения.
Давайте теперь запустим Rest API сервера, а
затем изучим некоторые из этих деталей.
Теперь, перейдя в наше приложение в браузере, так
что мы перейдем к этому LoopBack Explorer в браузере здесь.
В обозревателе LoopBack я собираюсь сначала войти в качестве администратора.
Таким образом, мы войдем в систему в качестве администратора, перейдя в /customers/login.
И затем здесь мы будем вводить имя пользователя,
Admin,
Password, Password,
и войти в систему, и как только мы войдем в систему, я просто собираюсь скопировать этот ID,
потому что это токен доступа.
И я собираюсь войти сюда, а затем установить токен доступа с
этим новым токеном доступа, который я только что получил, после этого
позвольте мне отправить несколько блюд на мой сервер, так
что теперь, когда я вошел в систему как администратор,
я должен иметь возможность отправлять блюда на мой сервер.
Так что я открою сообщение, и напомню, что я дал вам файл DB.json,
так что мы можем просто скопировать и вставить блюда в поле данных здесь.
Это мое первое блюдо, и в тот момент, когда я отправлю сообщение,
оно вернется с информацией о блюде здесь.
И обратите внимание, что он автоматически добавляет в поля CreateDat и UpdateDat здесь.
Это мое второе блюдо, так что, наконец, я закончил вводить все блюда,
всех лидеров и все акции, и мы все закончили.
Итак, давайте теперь продолжим, а
затем зарегистрируем нового клиента в системе.
Чтобы сделать это, позвольте мне удалить этот
токен доступа, а затем мы зарегистрируем нового клиента в системе.
Поэтому, чтобы сделать это, мы отправимся к публикации клиентов, а затем для данных,
позвольте мне просто нажать на это значение примера здесь, а затем опубликовать его здесь.
И для данных, имя,
позвольте мне зарегистрироваться с моим именем.
Таким образом, это будет
пользователь, не являющийся администратором, который я регистрирую,
и, И это письмо проверено, я должен удалить это отсюда, но я должен включить
поле, пароль здесь, чтобы я мог зарегистрировать пользователя.
Поэтому я регистрирую нового обычного пользователя здесь.
Поэтому, когда я регистрирую, он возвращается, чтобы подтвердить, что этот новый зарегистрированный
пользователь добавлен, а также дает мне идентификатор для этого пользователя.
Теперь позвольте мне войти в систему как этот зарегистрированный пользователь, а затем отправить пару комментариев.
Поэтому, чтобы войти в систему как зарегистрированный пользователь, я перейду к логину клиента,
и для имени пользователя я введу свое имя
и пароль, а затем, когда я войду, он вернется и даст мне идентификатор.
Теперь обратите внимание, что этот пользователь является обычным пользователем, а не администратором,
поэтому этот пользователь может только публиковать комментарии и редактировать свои собственные комментарии.
И или пост-фаворитов и редактировать свои собственные избранные.
Таким образом, когда вы публикуете пользователя, вы увидите, что это UserID, возвращенный здесь,
это идентификатор пользователя.
Таким образом, нам понадобится это всякий раз, когда мы публикуем комментарии или
когда мы публикуем наши избранные.
Итак, чтобы опубликовать комментарий для этого пользователя,
чтобы опубликовать комментарий, позвольте мне опубликовать пару комментариев от имени этого пользователя.
Итак, мы перейдем к Комментарии, а затем мы разместим здесь некоторые комментарии.
Итак, чтобы оставить комментарий, как вы
заметили, нам нужно предоставить три части информации.
Нам нужно предоставить CustomerID, DishESID, рейтинг и комментарий.
Поэтому для CustomerID мы просто вошли в систему, поэтому,
если вы идете к клиентам и внизу.
Мы получим CustomerID здесь, поэтому позвольте мне скопировать UserID отсюда.
А затем перейдите в раздел публикации комментариев, а
затем вставьте туда CustomerID.
Дай мне пойти и найти блюдо.
Так что если вы идете в, Блюда, а затем вы делаете получить на блюда,
вы получите все блюда, которые находятся в системе.
Так что из этого позвольте мне выбрать,
Первое блюдо, так что я просто возьму идентификатор блюда.
Затем, чтобы опубликовать комментарии, мы просто перейдем к Комментарии,
Post, где мы составляем наш комментарий.
А потом я вставлю туда удостоверение тарелки.
И для рейтинга, Я изменю этот рейтинг на 4 и,
Просто сообщение, Этот комментарий,
так что я опубликовал один комментарий для этого конкретного блюда.
Позвольте мне оставить еще один комментарий к другому блюду.
Так что позволь мне достать это второе блюдо.
Итак, вот идентификатор второго блюда, так что, опять же, возвращаясь к Комментарии.
Позвольте мне изменить Дишид здесь.
И затем, Позвольте мне изменить комментарии
, так что вы видите, что это другой комментарий для другого блюда.
Когда я отправлю комментарий, вы увидите, что он вернется с этим ответом здесь,
с рейтингом и конкретным блюдом и CustomerID и так далее.
Поэтому я теперь опубликовал два комментария для двух разных блюд здесь.
Дайте мне, сделайте эти два как мои любимые блюда.
Чтобы сделать это, позволь мне пойти в Избранное.
Спускаюсь к фаворитам.
Позвольте мне опубликовать пару фаворитов.
Поэтому, чтобы опубликовать любимое снова, я иду в избранное пост здесь.
Затем я нажимаю на это, а затем я вставлю в один DishID,
для CustomerID, позвольте мне просто подойти к клиенту здесь,
где я зарегистрировался в клиенте.
Таким образом, мы получим UserID оттуда.
И это один CustomerID, поэтому позвольте мне перейти в избранное.
И затем, В Избранном
позвольте мне протестировать CustomerID здесь, а затем опубликовать это в моем избранном.
Поэтому, когда я размещаю это в своих избранных, он отвечает этим, чтобы
вы могли видеть, что DishID и CustomerID и FavoriteID были опубликованы здесь.
Позвольте мне разместить еще одно блюдо для моих любимых, так что позвольте мне пойти в,
Блюда здесь у меня есть другое блюдо.
Так что позвольте мне скопировать, ID блюда и перейти к моим избранным, а
затем заменить идентификатор dishe's этим новым блюдом, а затем опубликовать это.
Так что теперь у меня должно быть два фаворита в моей группе.
Замечательно, так что теперь у нас есть пара фаворитов
, куча блюд, пара комментариев, все опубликовано.
Теперь как это полезно?
Позвольте мне, Закройте все это, а затем покажет вам, как это может быть полезно.
Итак, теперь, когда я получаю блюда, так например,
когда я хочу забыть конкретное блюдо.
Давай я приведу это первое блюдо сюда, позволь мне скопировать идентификатор блюда, и
я смогу получить это блюдо.
Итак, здесь вы видите, что я собираюсь /Dishes/ID так
здесь, когда я хочу получить это конкретное блюдо.
Я могу поставить ДиШид там, а затем попробовать его, а
затем здесь я получаю ДиШид здесь.
Теперь, если я хочу включить комментарии из блюда, затем в фильтр,
я должен ввести include в кавычки, а
затем в скобках я указываю,
Имя,
Отношение, которое я хочу включить в это,
поэтому, когда я говорю включить комментарии.
Так что это как монголы населяют, он действует аналогичным образом.
Поэтому, когда я говорю включить комментарии, а затем получить блюдо,
обратите внимание, что когда блюдо извлекается
, Здесь, вы получаете блюдо, но также вы получаете массив комментариев здесь.
Так вот как вы можете заполнить детали из отношения,
которое у вас есть с другим элементом здесь.
Теперь, аналогичным образом, перейдем к комментариям, например.
В комментариях также, когда я получаю комментарии, я могу указать в фильтре.
Поэтому, когда я просто говорю комментарии GET, он
вернет все комментарии, которые были опубликованы.
Теперь, если я хочу заполнить информацию DishID и CustomerID, я могу сказать фильтр.
В фильтре, я могу сказать включить.
И затем в скобках я могу сказать блюда
, потому что это отношения, которые я определил в комментариях и
блюдах, а затем блюда и клиент.
И когда я получу эту информацию, вы увидите, что в возвращенных комментариях,
для каждого комментария, вы заметите, что комментарий дается, а
затем соответствующая информация о блюде также заполняется, и
соответствующая информация о клиентах также заполняется для каждого комментария.
Таким образом, теперь мы можем заполнить два отношения, которые мы определили из
блюд автоматически здесь, как показано здесь.
Аналогично, для избранного,
когда мы извлекаем избранное,
мы скажем избранное и конкретный идентификатор здесь.
И тогда мы можем фильтровать, так
что конкретный фаворит может быть извлечен.
Вы не можете получить все избранные, потому что они могут быть избранными от других
пользователей также в этом списке, поэтому мы не сможем сделать GET для всех избранных.
Но вместо этого, когда мы извлечем это, вы можете
попросить заполнить информацию здесь, основываясь на отношениях.
Таким образом, мы можем сказать, в цитате, («include»: и написанные квадратные скобки.
Мы можем сказать ["блюда», «клиент»]),
И получить информацию.
Таким образом, вы заметили, что здесь, в теле ответа,
вы получаете любимое, но также соответствующее блюдо и
соответствующую информацию клиента заполнены здесь.
Вот как мы можем получить дополнительную информацию
с нашего сайта сервера по мере необходимости.
С этим мы завершаем это упражнение.
В этом упражнении я продемонстрировал вам, как мы можем определить различные отношения,
а затем иметь возможность получить информацию, а также использовать этот
фильтр include для того, чтобы включить дополнительную информацию об этой связи в
документ при получении документа или набора документы.
С этим мы завершаем это упражнение.
Таким образом, в этих трех упражнениях, которые мы сделали до сих пор с LoopBack, я
проиллюстрировал различные аспекты того, как вы можете настроить и построить свой сервер LoopBack.
С этим мы завершаем это упражнение.
Это хорошее время для
вас сделать GET комментарий с сообщением LoopBack отношения.
[ МУЗЫКА]