[MÚSICA]
En el ejercicio anterior hemos conseguido que nuestros servidores loopback lleguen a cierta etapa.
Ahora podemos conectar nuestros servidores de loopback a la base de datos mongolab,
la base de datos actúa como fuente de datos para nuestros servidores de loopback.
También definimos listas de acceso controladas para controlar el acceso al radio, el
resto están aquí, en partes con nuestro servidor de bucle invertido.
En este ejercicio, exploraremos las relaciones de bucle invertido.
Ahora podemos definir modelos y definir relaciones entre los modelos.
Entonces, por ejemplo, tomemos el ejemplo de un comentario.
Cuando publica un comentario sobre un plato, el comentario está relacionado con el plato.
Un comentario pertenece a un plato.
Del mismo modo, un usuario específico publica un comentario.
Por lo tanto, el comentario pertenece a la relación con este usuario específico.
Ahora, cuando se mira la relación en la dirección inversa,
un plato puede tener varios comentarios asociados con él, y de
manera similar, un usuario puede haber publicado varios comentarios.
Así que estos son los mayores tipos de relaciones que puede definir entre
los diferentes modelos dentro de nuestro servidor de bucle invertido.
También veremos el uso de un bucle de retorno mixto,
que nos permite agregar propiedades adicionales a nuestros modelos.
Al final de este ejercicio tendrá un servidor de bucle invertido bastante completo,
que luego podemos conectar a nuestro cliente angular y
poder hacer uso de él como back-end para nuestro cliente angular.
Para continuar con el ejercicio, en la carpeta de nuestro servidor de bucle invertido,
vamos a crear un nuevo modelo para un comentario.
Entonces este modelo se definirá como
comentario, y en este caso ese modelo también se guarda
en MongoDB y será como un modelo persistente,
y expondremos el comentario a través de la API REST y
la carpeta del modelo está en la carpeta común y para
este comentario tendremos dos propiedades asociadas con él.
Y la primera propiedad es Rating.
Que es del tipo Número.
Esto es necesario y el valor predeterminado, lo dejaré como 5.
Y la segunda propiedad sería Comment, que es de la cadena de tipo.
Esto es obligatorio y el valor predeterminado está vacío.
Así que cada comentario tendrá estas dos propiedades, calificación y comentario,
asociadas con él.
Además, ahora tenemos que definir la relación entre el comentario y
el usuario que está enviando el comentario, y también el comentario y
el plato con el que este comentario está asociado.
Del mismo modo, hemos visto en el ejercicio anterior que han añadido
sus favoritos para un usuario.
Entonces, para definir los favoritos, permítanme volver a definir un modelo,
y ese nombre del modelo es Favorite y esto también se guarda en el MongoDB,
y esto también es un PersistedModel, y
expondremos el favorito para el resto API y está en la carpeta común.
Ahora el favorito en sí mismo no necesita ninguna propiedad específica porque todo
lo que lo hace es asociar al usuario específico con este plato específico.
Así que el favorito aquí se va a utilizar simplemente como un puente entre el usuario
y el plato.
Por lo tanto, usaremos el favorito como una forma de definir las relaciones entre el plato y
un usuario.
Por lo tanto, no tiene ninguna propiedad específica.
Así que ahora hemos añadido dos modelos a nuestro servidor de bucle invertido.
Ahora, empecemos a definir las relaciones modelo.
Ahora, como expliqué anteriormente,
hay varios tipos de relaciones modelo que podemos definir.
Comencemos con la definición de la relación entre un plato y un comentario.
Entonces, para definir un modelo en loopback, diremos, relación lb.
Y cuando entra la relación,
necesitamos especificar el modelo a partir del cual crear la relación.
Así que en primer lugar, vamos a crear una relación entre un plato.
Así que a partir de los platos, y un plato podría tener muchos comentarios asociados con él,
así que
es por eso que el tipo de relación tiene muchos y está asociado con un comentario y el nombre de la propiedad para
la relación lo dejaré como el predeterminado con sólo comentario con
una pequeña letra c. clave externa personalizada específica si queremos.
Si no lo hacemos, loopback asignará automáticamente la clave externa,
que no serían más que los comentarios y un id asociado con ella.
Así que mirará hacia atrás para definirlo automáticamente.
También podemos tener a través de modelos, que en este caso no es aplicable.
Un modelo a través nos permitirá definir la relación con uno y otro modelo y
en este caso, no tenemos tal relación, así que simplemente diremos que no y
no anidaremos la API REST, y también,
desactivaremos la relación para que no se incluya.
Y así, hemos especificado
que la inhabilitación de la relación de ser incluida es no.
Más tarde verá por qué esto es importante.
Tendríamos una forma de incluir información de un
modelo en otro modelo haciendo una inclusión allí.
Así que eso es algo que hemos pedido que no se impida.
Ahora de manera similar, podemos definir la siguiente relación
entre el comentario y los platos.
Así que cuando se define una relación con el comentario y los platos, así que
permítanme decirlo relación lb, y ahora vamos a definir la relación entre el comentario.
Y dado que un comentario sólo puede pertenecer a un plato específico, por
lo que vamos a definir que pertenece a una relación, y esto pertenece
al plato aquí y el nombre de la propiedad para la relación sería platos.
Y no usaremos una clave externa personalizada,
permitiremos que la relación se use en las API REST.
En realidad no queremos eso, así que debería haber escrito no para eso,
pero iré a editar la relación creada en mi código allí.
Así que puedo entrar en el archivo comment.jason y
simplemente cambiar esto de un sí a un no allí,
lo haré porque no quiero que se anide a continuación.
Así que déjame seguir adelante y
hacer ese cambio en el comentario llamado Jason antes de que me olvide de hacer eso.
Y luego abre el comentario llamado Jason.
Y ves que en el comentario llamado Jason tenemos esta relación aquí y
luego voy a cortar esto porque no quiero que se haga ese anidamiento.
Es un error que cometí al escribir, así que lo eliminaré.
La siguiente relación que voy a definir es entre el comentario y
el cliente.
Permítanme de nuevo, escriba relación lb aquí.
Así que vamos a definir la relación entre el comentario y el cliente.
Un comentario pertenece a un cliente como cabría esperar,
y, Aquí déjame
entrar explícitamente, Una clave externa personalizada.
Solo estoy haciendo esto para ilustrarte que puedo
definir una clave externa específica aquí.
No voy a anidar, y no voy a desactivar aquí.
Por lo tanto, esta es la relación que definiré entre el comentario y
el cliente.
A continuación, Permítanme definir la relación entre el cliente y el comentario.
Así que aquí, de un cliente, un cliente tiene muchos comentarios,
y su nombre de propiedad voy a introducir como comentarios.
Y luego, definiré la clave externa como CustomerID.
Y no necesito un modelo a través aquí, no voy a anidar y no voy a desactivar.
Así que ahora he definido todas las relaciones entre los comentarios y
el cliente, y los comentarios y los platos.
Ahora, lo mismo vamos a trabajar en los favoritos.
Ahora, para los favoritos, Déjame definir
la relación entre los platos y los favoritos.
Así que un plato podría haber sido favorito para muchos usuarios,
por lo que tiene muchas relaciones con un favorito.
Y usaremos favoritos allí, y
no necesitaremos un modelo a través y no y no.
Entonces, ahora hemos definido que tiene muchas relaciones entre el plato y
un favorito.
Permítanme ahora definir una relación entre un favorito y un plato.
Así que para definir la relación entre el favorito y
el plato déjame decir favorito pertenece al plato, y
vamos a utilizar los platos y no hay clave externa, no anidado.
Y no inhabilitaremos la relación para que no se incluya.
Ahora, tendremos que definir esa relación entre
un favorito y un cliente.
Así que vamos a decir que favorito pertenece a un cliente y,
Vamos a definirlo como clave externa como un ID de cliente.
No permitiremos el anidamiento de la API REST y no desactivaremos.
Ahora la última relación, es entre el cliente y el favorito.
Entonces, ahora definiremos la relación entre el cliente tiene muchos,
Favoritos, y esto,
definiré el CustomerID como la clave externa, no necesito un modelo pasante,
y no permitiré el anidamiento y no desactivaré nada.
Así que eso es todo, hemos definido todas las relaciones que necesitamos
entre los comentarios y los clientes y los platos.
Entre los favoritos, los clientes y los platos.
Ahora, vamos a examinar el uso de un mixin.
Ahora, este mixin que voy a usar con mi servidor Loopback es
un mixin que agrega marcas de tiempo a cualquier cosa que se guarde o actualice.
Así que recuerde que en nuestro servidor Express, tuvimos el creado en y
actualizado en agregado automáticamente mediante el uso de Mangoose.
Ahora, para Loopback, necesito usar este
mixin específico llamado como Lookback ds timestamp mixin.
así que TosDo que primero tengo que instalar el mixin en mi proyecto.
Así que diré npm install
loopback-ds-timestamp-mixin —save,
y la instalación de este módulo de nodo.
Y una vez que este módulo de nodo está instalado, como puede ver,
esta es la versión número 3.4.1 que estoy usando.
Como este mixin está instalado, necesito entrar y
habilitar este uso de mixin dentro de mis modelos.
Para hacer eso vamos al código, en el código déjame primero abrir
ese conflicto de modelo adyacente, que está en la carpeta del servidor.
Entonces, en el modelo confi.json, si vas aquí arriba, verás estas
mixins definidas aquí.
Así que tenemos las mixins de loopback common y loopback server.
Ahora voy a agregar el nuevo mixin que acabo de agregar aquí.
Así que, este mixin está en.. /node_modules.
Entonces esto está en la carpeta de módulos de nodo justo allí.
/loopback-ds-timestamp-mixin.
Esto permite que mi servidor Loopback haga uso de este mixin dentro de mi servidor.
Ahora no solo esto, necesito especificar para
todos los modelos donde quiero que se incluya este mixin.
Entonces, iré ahora a esa carpeta común, y
en la carpeta común editaremos ese archivo comment.json y
en el archivo comment.json, agregaremos en el mixin.
Entonces, después de las propiedades, agregaré el mixin como
sincronización entre comillas, dirás mixins.
:, Y, allí,
y dentro de los mixins veremos
Timestamp, true.
Esto mismo que necesito pegar en algunos de los otros modelos, así que
déjame copiar esto.
Entonces diremos mixins Timestamp true en comments.json.
Luego iremos a dishes.json y
luego agregaremos esto también a dishes.json y
luego irán a favorite.json, y
luego agregaremos a favorite.json.
Lo agregaremos a readers.json, Y
lo agregaremos a promotions.json.
Y guarda todos los cambios.
Ahora configuraremos algunas listas de control de acceso más, así que
yendo al terminal déjame escribir lb acl para configurar algunas listas de control de acceso.
Entonces, aquí para los platos,
especificaré para todos los métodos y propiedades el derecho
solo puede ser hecho por el usuario con el rol admin.
Así que ese es el primer control de acceso que configuro para
platos, luego hago lo mismo para los líderes.
Todos los métodos y propiedades, escritura, otros,
el rol de administrador otorgan acceso explícitamente.
A continuación, para las promociones también,
el mismo, todos los métodos y
propiedades, escribir, y otros,
Rol conceder acceso explícitamente, porque sólo desea que el administrador
para poder hacer cualquier cambio en los platos, promociones, o líderes.
Ahora, para los comentarios, los comentarios pueden ser publicados por cualquier usuario registrado.
Por lo tanto, para los comentarios, permítanme definir la ACL para los comentarios.
Diremos comentarios, todos los métodos y
propiedades, todos los tipos, todos los usuarios,
denegar explícitamente el acceso.
Porque no queremos que sean capaces de hacer todas las cosas.
Ahora, vamos a abrir sólo algunas de las operaciones a habilitar por los usuarios.
Entonces, para comentarios, todos los métodos y
propiedades, diremos operación de lectura. La
operación de lectura de los comentarios será sólo un usuario autenticado.
Por lo tanto, solo los usuarios que hayan iniciado sesión podrán leer los comentarios.
Ahora de manera similar, permítanme definir para el
, Comentarios, un solo método, y
crear, ¿quién puede crear comentarios?
Cualquier usuario autenticado, cualquier usuario autenticado puede crear comentarios.
Así que vamos a conceder explícitamente el acceso, ahora,
el último para los comentarios, Vamos a decir para
el comentario, todos los métodos y propiedades.
Escribir, lo que significa que, ¿a quién se le permite escribir el comentario?
Solo el usuario que posee ese objeto puede realizar cambios en el comentario.
Así que solo el usuario que ha enviado el comentario puede hacer cambios en el comentario,
ya sea editar o eliminar el comentario, así que eso es lo que permitiremos.
Mismo conjunto de operaciones, vamos a aplicarlos a los favoritos.
Entonces, para los favoritos, ya que no hemos agregado
ninguno de los controles de acceso, por lo que para los favoritos,
todos los métodos y propiedades, todos los tipos,
todos los usuarios, deniegan explícitamente el acceso allí.
Para los favoritos, vamos a definir para
todos los métodos y propiedades, leer,
sólo para el usuario que posee ese objeto.
Así que sólo el usuario puede leer
sus propios favoritos, ningún otro usuario debería ser capaz de ver sus propios favoritos.
Ahora el tercero es la creación de favoritos,
por lo que para la creación de favoritos, diremos por
favorito, un solo método, crear,
cualquier usuario autenticado puede crear un comentario.
Y por último, para un favorito, todos los métodos y
propiedades, la operación de escritura, solo para el usuario que posee ese objeto.
Así que solo el usuario que haya introducido el favorito para
sí mismo puede editar o eliminar esos favoritos, eso es todo.
Así que ahora hemos establecido todos los controles de acceso y
todas las diferentes relaciones para nuestra aplicación.
Ahora vamos a iniciar la API de descanso del servidor, y
luego explorar algunos de estos detalles.
Ahora, yendo a nuestra aplicación en el navegador, así que
iremos a ese LoopBack Explorer en el navegador aquí.
En el Explorador de LoopBack, lo que voy a hacer primero es iniciar sesión como administrador.
Así que vamos a iniciar sesión como administrador yendo a /customers/Login.
Y luego aquí escribiremos nombre de usuario,
administrador, contraseña,
contraseña, e iniciaremos sesión,
y una vez que hayamos iniciado sesión, solo voy a copiar este ID,
porque este es el token de acceso.
Y voy a entrar aquí, y luego establecer el token de acceso con
este nuevo token de acceso que acabo de obtener, después de eso,
Déjame publicar algunos platos
en mi servidor, así que ahora que estoy conectado como administrador,
debería poder publicar platos en mi servidor.
Así que voy a abrir la publicación, y recordar que le había dado el archivo DB.json,
por lo que podemos copiar y pegar los platos en el campo de datos aquí.
Este es mi primer plato, y en el momento en que
publique, volverá con la información del plato aquí.
Y tenga en cuenta que se agrega automáticamente en los campos CreateDat y UpdateDat aquí.
Este es mi segundo plato, así que finalmente, he completado la introducción de todos los platos,
todos los líderes, y todas las promociones, y todos hemos terminado.
Así que vamos a seguir adelante y
luego registrar un nuevo cliente en el sistema.
Entonces, para hacer eso, permítanme eliminar este
token de acceso, y luego registraremos un nuevo cliente en el sistema.
Entonces, para hacer eso, iremos a publicar clientes, y luego para los datos,
déjame simplemente hacer clic en este valor de ejemplo aquí, y luego publicarlo aquí.
Y para los datos, el nombre de pila,
déjame registrarme con mi nombre de pila.
Así que este sería un
usuario no administrador que estoy registrando, y,
Y este correo electrónico verificó que debería eliminar esto de aquí, Pero debería incluir el
campo, contraseña aquí, para poder registrar al usuario.
Así que estoy registrando un nuevo usuario común aquí.
Entonces, cuando me registro, vuelve para confirmar que este nuevo
usuario registrado se agrega, y también me da una ID para ese usuario.
Ahora déjame iniciar sesión como este usuario registrado y luego publicar un par de comentarios.
Así que para iniciar sesión como usuario registrado, bajaré al inicio de sesión del cliente,
y para el nombre de usuario, escribiré mi nombre
y la contraseña y luego, cuando inicie sesión, volverá y me dará un ID.
Ahora tenga en cuenta que este usuario en particular es un usuario ordinario y no un administrador,
por lo que este usuario solo puede publicar comentarios y editar sus propios comentarios.
Y o post-favoritos y editar sus propios favoritos.
Por lo tanto, cuando publiques el usuario, verás que es el ID de usuario devuelto aquí,
shis es el ID del usuario.
Por lo tanto, necesitaríamos esto cada vez que
publicamos comentarios o cuando publicamos nuestros favoritos.
Por lo tanto, para publicar un comentario para este usuario, así que
para publicar un comentario, permítanme publicar un par de comentarios en nombre de este usuario.
Por lo tanto, iremos a Comentarios, y luego publicaremos algunos comentarios aquí.
Por lo tanto, para publicar un comentario como usted nota,
tenemos que proporcionar tres piezas de información.
Tenemos que proporcionar el ID del cliente, el ID del plato, la calificación y el comentario.
Así que para el CustomerID, acabamos de iniciar sesión, así que
si vas a los clientes y aquí abajo en la parte inferior.
Obtendremos el ID de cliente aquí, así que permítanme copiar el ID de usuario desde aquí.
Y luego vaya a la sección de publicación de comentarios y
luego pegue el ID de cliente allí.
Déjame ir a buscar un plato.
Así que si vas a, Platos y luego haces un conseguir en los platos,
obtendrás todos los platos que están en el sistema.
Así que de esto permítanme seleccionar el
, Primer plato, así que voy a tomar la identificación del plato.
A continuación, para publicar los comentarios, vamos a ir a Comentarios,
Publicar donde estamos componiendo nuestro comentario.
Y luego pegaré la identificación del plato ahí.
Y para la calificación, Voy a cambiar esta calificación a 4 y,
Sólo publicar, Este comentario,
así que he publicado un comentario para este plato en particular.
Permítanme publicar un comentario más para otro plato.
Así que déjame agarrar este segundo plato.
Así que aquí está la identificación del segundo plato así, de nuevo, volviendo a Comentarios.
Déjame cambiar el Dishid aquí.
Y luego, Déjame cambiar los comentarios para
que veas que este es un comentario diferente para un plato diferente.
Cuando publique el comentario, verá que volverá con esta respuesta aquí,
con la calificación y el plato específico y el ID del cliente, etc.
Así que ahora he publicado dos comentarios para dos platos diferentes aquí.
Déjame, hacer estos dos como mis platos favoritos.
Así que para hacer eso, déjame ir a Favoritos.
Bajando a favoritos.
Déjame publicar un par de favoritos.
Así que para publicar un favorito de nuevo, voy a los favoritos post aquí.
Luego hago clic en esto y luego pegaré en el único DISHID,
para el ID de cliente, déjame ir hasta el cliente aquí,
donde inicié sesión en el cliente.
Así que obtendremos el ID de usuario desde allí.
Y este es un ID de cliente, así que déjame ir a los Favoritos.
Y luego, En los Favoritos,
déjame probar el ID de cliente aquí, y luego publicar esto en mis favoritos.
Entonces, cuando publico eso en mis favoritos, responde con esto para que
pueda ver que el DishiD y el CustomerID y el FavoriteID se han publicado aquí.
Déjame publicar un plato más a mis favoritos así que déjame ir a la,
Platos aquí tengo otro plato.
Así que déjame copiar el, ID del plato e ir a mis favoritos y
luego reemplazar la identificación del dishe con ese nuevo plato, y luego publicar eso.
Así que ahora debería tener dos favoritos en mi grupo.
Maravilloso, así que ahora tenemos un par de favoritos,
un montón de platos, un par de comentarios, todos publicados en.
Ahora, ¿cómo es útil esto?
Déjame, Cerrar todo esto y luego te mostrará cómo esto puede ser útil.
Entonces, ahora cuando consigo platos, por ejemplo,
cuando quiero olvidar un plato específico.
Déjame traer este primer plato aquí, déjame copiar la identificación del plato y,
puedo recuperar ese plato específico.
Así que aquí ves que voy a /plates/ID así que
aquí, cuando quiero recuperar ese plato específico.
Puedo poner el Dishid allí y luego probarlo y
aquí tengo el Dishid aquí.
Ahora, si quiero incluir los comentarios del plato, entonces en el filtro,
Debo escribir incluir entre comillas y
luego entre corchetes especifico,
El nombre de,
La relación que quiero incluir en eso,
así que cuando digo incluir comentarios.
Así que esto es como los mongoles pueblan, actúa de manera similar.
Así que cuando digo incluir comentarios y luego recuperar el plato,
notar que cuando se recupera el plato,
Aquí, se obtiene el plato, pero también se obtiene una variedad de comentarios aquí.
Así es como puedes rellenar los detalles de la relación
que tienes con otro elemento aquí.
Ahora, de manera similar, ir a los comentarios, por ejemplo.
En los comentarios también, cuando recupero los comentarios, puedo especificar dentro del filtro.
Entonces, cuando solo digo comentarios GET, traerá de
vuelta todos los comentarios que se han publicado.
Ahora, si quiero rellenar la información DishiID y CustomerID, puedo decir filtro.
En el filtro, puedo decir incluir.
Y luego entre paréntesis, puedo decir platos porque
esa es la relación que he definido dentro de los comentarios y
los platos, y luego platos y cliente.
Y cuando recupere esta información, verá que en los comentarios devueltos,
para cada comentario, notará que el comentario se da y
luego la información correspondiente del plato también se rellena, y
la información correspondiente del cliente también se rellena para cada uno de los comentarios.
De esta manera, ahora podemos poblar las dos relaciones que hemos definido a partir de
los platos automáticamente aquí, como se muestra aquí.
Del mismo modo, para los favoritos,
cuando estamos recuperando los favoritos,
diremos favoritos y un ID específico aquí.
Y luego podemos filtrar, para
que el favorito específico pueda ser recuperado.
No puede recuperar todos los favoritos porque podrían ser favoritos de otros
usuarios también en esa lista, por lo que no podremos hacer un GET en todos los favoritos.
Pero en cambio, cuando recuperemos esto, entonces puede pedir que
la información se complete aquí en función de las relaciones.
Así que podemos decir, entre comillas, («incluir»: y corchetes escritos.
Podemos decir ["platos», «cliente"]),
Y recuperar la información.
Así que notarías que aquí, en el Cuerpo de Respuesta,
obtienes el favorito, pero también el plato correspondiente y
la información del cliente correspondiente rellenado aquí.
Así es como podemos recuperar información adicional
de nuestro sitio de servidor según sea necesario.
Con esto, completamos este ejercicio.
En este ejercicio, le he demostrado cómo podemos definir varias relaciones
y luego ser capaces de recuperar información, y también utilizar este
filtro de inclusión para incluir la información adicional de esa relación en
el documento cuando recupere el documento o un conjunto de documentos.
Con esto, completamos este ejercicio.
Así que en estos tres ejercicios que hemos hecho hasta ahora con LoopBack, he
ilustrado varios aspectos de cómo puede configurar y construir su servidor LoopBack.
Con esto, completamos este ejercicio.
Este es un buen momento
para que haga un comentario GET con las relaciones de bucle de retorno de mensaje.
[ MÚSICA]