Ahora que hemos aprendido acerca de la Población de Mangosta,
y cómo nos permite rellenar un documento con información de otro documento.
En este ejercicio, modificaremos el servidor express en el que hemos estado trabajando hasta ahora.
En el esquema de plato que hemos definido anteriormente, tuvimos comentarios.
Para los comentarios, teníamos el campo autor
que usamos para almacenar los detalles sobre el autor.
En este ejercicio, vamos a convertir el campo autor en una referencia a un documento de usuario,
y vamos a utilizar la población de mangosta para rellenar la información en
el documento de platos como y cuando sea necesario con el
fin de proporcionar la información al cliente.
Ahora el uso de población poblada y mangosta debe hacerse
con prudencia para no causar demasiada sobrecarga en el lado del servidor.
Ahora, en este ejercicio,
vamos a usarlo simplemente para rellenar la información
en el campo de autor de nuestros comentarios.
Por lo tanto, vamos a proceder con el ejercicio para aprender cómo usamos la población de mangosta.
Para comenzar en este ejercicio,
vaya al proyecto y abra el archivo user.js.
Entonces, en el archivo user.js,
almacenamos el esquema de usuario.
Voy a modificar el esquema del usuario agregando un par de campos más allí.
Uno es el primer nombre,
que será
del tipo string y
el predeterminado sería una cadena vacía.
Por lo tanto, el primer nombre como
el nombre indica, almacena el primer nombre para el usuario y luego tendremos otro campo llamado apellido,
que también es del mismo tipo.
Por lo tanto, sólo voy a copiar estas dos piezas de información y luego copiarla
aquí y así ahora nuestro documento de usuario contendrá,
además del nombre de usuario y contraseña,
nombre de usuario y silencio y sal que hemos visto anteriormente,
que se agrega automáticamente por el módulo de mangosta local pasaporte .
También tendremos el nombre y apellidos del usuario que se define aquí.
Más adelante veremos cómo inicializaríamos
estos valores modificando el proceso de registro del usuario.
Ahora, una vez que hayamos completado
esto, de esta manera la información del usuario
puede ser simplemente recuperada buscando el documento de usuario aquí.
Entonces, ahora que tenemos la información sobre el usuario en el documento de usuario,
entrando en el esquema de plato,
así que entramos en el archivo dishes.js.
En el esquema de plato anterior,
estábamos almacenando el autor del documento en forma de una cadena aquí.
Ahora vamos a aprovechar el hecho de que
tenemos el apoyo de la población de mangosta.
Así que voy a convertir el campo de comentario de una cadena en
tipos de esquema de mangosta ID de objeto.
Así que, de esta manera, lo siento, campo equivocado.
Quise convertir el campo de autor en
tipos de esquema de mangosta ID de objeto.
Por lo tanto, el campo autor ahora en lugar de almacenar una cadena,
tendrá una referencia al documento de usuario.
Entonces, cuando convierto el campo de autor en este tipo,
entonces la segunda propiedad que definí aquí será una referencia,
que sería una referencia al modelo de usuario.
Por lo tanto, de esta manera, ahora vamos a
conectar este campo de autor y este campo de autor
simplemente almacenará una referencia al ID del documento de usuario, en
lugar de almacenar los detalles sobre el autor en forma de nombre.
Ahora, cuando hacemos eso,
podemos usar mangosta poblar para rellenar
esta información en nuestro documento de platos siempre que sea necesario.
Entonces, con esta modificación al esquema de platos, en el archivo dishes.js,
ahora actualizaremos el enrutador de platos para usar la población de mangosta.
Entonces, yendo a dishRouter.js.
En enrutador de platos, recuerde que cuando estábamos recibiendo un plato aquí,
ahora cuando usted consigue el plato aquí,
decimos que los platos encuentran entonces.
Entonces, justo en ese punto,
diremos que los platos encuentran y diremos después de esto, poblar.
Por lo tanto, estamos utilizando el apoyo de la población en mangosta
y vamos a decir poblar comentarios autor.
Por lo tanto, al afirmar esto,
estamos diciendo que cuando
el documento de platos se ha construido para devolver la respuesta al usuario,
vamos a llenar el campo de autor dentro de allí desde el documento de usuario allí dentro.
Por lo tanto, esta llamada al relleno asegurará que
el otro campo se rellenará con la información según sea necesario.
Del mismo modo, ir a la identificación del plato aquí,
incluso en el ID del plato, lo mismo.
Vamos a decir poblar y comentarios autor añadido
en los platos encontrar por id en
el get del endpoint /dish ID.
Del mismo modo, en los comentarios también cuando recuperamos el plato,
vamos a decir poblar comentarios autor aquí y
lo mismo también en el enrutador de plato,
comentarios ID de plato, ID de comentario también.
Cuanto más grande poblando esta información allí.
Ahora, por supuesto, lo que esto significa es que cuando usted está publicando el plato,
antes está incluyendo la información del autor en el cuerpo del mensaje.
Entonces, ahora aquí cuando tratamos de empujar el comentario en eso,
por lo que esta publicación corresponde al campo de comentarios ID del plato.
Por lo tanto, así es como estábamos publicando un comentario a un plato específico.
Entonces, ahora en este post,
ya que ya no estamos almacenando la información sobre el autor,
así que lo que tenemos que hacer es cuando empujamos el elemento en el campo de autor allí.
Por lo tanto, aquí cuando se está llenando la información en el plato,
tendremos que primero-
Recordemos que el cuerpo contiene el comentario ya,
pero la propiedad del autor no estará allí en el cuerpo del mensaje en el libro,
pero dependiendo de qué usuario está publicando esta información,
podemos rellene inmediatamente el campo de autor.
Ahora, ¿cómo sabemos qué usuario está publicando esta información?
El hecho de que hayamos hecho el usuario verificado aquí para la publicación,
significa que un usuario específico está publicando esta información,
y al hacer el usuario verificado,
ya habríamos cargado en el req.user en el objeto de solicitud.
En el objeto de solicitud,
podemos entrar y decir usuario de naufragio,
y luego subrayar ID aquí.
Así que, una vez más, permítanme reiterar este punto,
¿cómo obtenemos la información del autor aquí?
Ahora, recuerde que hemos actualizado el esquema de platos, de
modo que el campo autor en el comentario simplemente almacenará
el ID del objeto que se refiere al usuario que está publicando este comentario.
Ahora, ¿cómo sabemos qué usuario está publicando este comentario?
Ahora de nuevo, para reiterar este punto,
recuerde que cuando verificamos el usuario aquí llamando a autenticar verificar usuario,
el pasaporte autorizado JWT habría cargado
la información del usuario en el cuerpo de la solicitud en forma de req.user.
Por lo tanto, ese usuario contendrá el ID
del usuario específico que realmente está publicando este comentario.
Por lo tanto, ya hemos verificado la autenticidad del usuario,
por lo que el ID de usuario se puede obtener simplemente diciendo req.user.
_ID, y el ID de ese usuario,
asignaré esto al campo de autor fuera del comentario.
Ahora, cuando llegue el comentario,
el comentario en el cuerpo del mensaje de solicitud
solo contendrá el campo de calificación y el campo de comentario.
Ahora no queremos enviar explícitamente el campo de autor más desde el lado del cliente,
en lugar de eso debería insertarse automáticamente
en el lado del servidor basado en
la autenticidad del usuario Ese es el punto que había estado
reiterando en esta modificación que he hecho aquí.
Por lo tanto, la información de los usuarios se obtiene automáticamente del req.user que se
carga en el cuerpo del mensaje de solicitud por el usuario de verificación de autenticación,
que va a usar Passport authenticate con la estrategia JWT allí.
Además, ahora cuando recibimos el plato actualizado aquí,
necesitamos rellenar la información del autor en el plato.
Entonces, en este punto,
cuando recibamos el plato aquí
, vamos a buscar los platos aquí.
Por lo tanto, vamos a decir dishes.FindById
y luego proporcionar el ID del plato como el parámetro aquí,
así que vamos
a decir encontrar por ID, ID del plato, y luego, tenemos que llenar el autor comentarios aquí,
y luego vamos a decir entonces plato.
Dentro de allí, vamos a enviar esta información del plato de vuelta al usuario aquí.
Así que, déjame cortar eso y pegarlo aquí.
Por lo tanto, esta modificación es necesaria porque ahora necesito rellenar
la información del autor en
el comentario antes de poder enviar la información actual al usuario.
Por lo tanto, esta es la modificación adicional que tenemos que
hacer cuando usamos la población de mangosta aquí.
Del mismo modo, ahora entrando en el punto,
cuando modificamos un comentario específico con el ID de comentario,
por lo que esto está debajo de la parte ID de comentario de ID del plato.
Por lo tanto, cuando hacemos el puesto aquí, por
lo que primero encontramos los platos encontrar por id req params plato ID,
luego en el plato. Por lo
tanto, lo primero que comprobamos es asegurarse de que si el plato no es nulo,
y los comentarios del plato ID no es
nulo, por lo que comprobamos para asegurarse de que el comentario está realmente presente en el plato,
y luego cuando se devuelve el plato en sí,
entonces tenemos que buscar de nuevo
el plato porque tenemos que rellenar los comentarios autor en el plato.
Así que aquí, diremos dishes.findbyId (ID del plato),
la razón por la que necesitamos hacer una búsqueda más es porque
necesitamos rellenar el comments.author aquí, por
lo que esa es la única razón por la que necesitamos hacer una búsqueda más aquí.
Luego, cuando recibimos el plato aquí,
obviamente porque acabamos de actualizar el plato para que la información del plato se
encuentre en la base de datos,
por lo que debería funcionar bien y luego dentro se dirá el
código de estado de riesgo 200 res conjunto de contenido de encabezado aplicación json,
y luego devolver el plato aquí,
y luego manejaremos el error aquí,
y luego los otros si los platos
ahora y también los otros errores que hemos configurado anteriormente,
se manejarán como de costumbre aquí.
Por lo tanto, estos son los cambios adicionales que necesitamos para asegurarnos cuando actualices el plato,
cuando estás enviando el comentario actualizado o el plato actualizado,
entonces rellenaremos el comentario en el plato aquí.
Del mismo modo, yendo a la eliminación aquí,
y luego después de eliminar el comentario, de
nuevo vamos a ir a buscar el plato y llenar la información del autor.
Por lo tanto, déjame copiar esta parte,
y luego vamos a estar haciendo exactamente lo mismo aquí,
así que vamos a decir guardar plato,
entonces vamos a ser entonces chequeando dish.FindbyId (autor del plato),
y luego vamos a llenar el autor de comentarios,
y luego vamos a decir (entonces) plato,
y luego res.statusCode, y así sucesivamente,
y el manejo de errores restante como antes aquí.
Por lo tanto, con esta modificación en el enrutador de plato,
ahora el último punto que debemos considerar es el hecho de que en el archivo user.js,
ahora hemos añadido a los campos,
el campo de nombre y apellido que por defecto serán cadenas vacías.
Por lo tanto, cuando el usuario se está registrando,
debemos permitir que el usuario proporcione el nombre y
apellidos en el proceso de registro.
Ahora, ¿dónde tiene lugar eso?
Eso tiene lugar en el archivo.js del usuario.
Entonces, yendo a los usuarios users.js,
cuando el usuario publica en la barra de registro,
antes solo estábamos publicando el nombre de usuario y la contraseña.
Además de esos dos,
en el objeto json que incluimos en el cuerpo del mensaje de solicitud entrando,
el mensaje de solicitud posterior que viene desde el lado del cliente,
también podemos incluir el nombre y apellidos para el usuario.
Entonces, cuando se incluye el nombre y el apellido del usuario,
¿qué voy a hacer aquí?
Por lo tanto, recuerde que cuando dice user.register en este punto la información del usuario entra,
y luego ha enviado el nombre de usuario aquí,
y también ha asignado la contraseña aquí que se
convertirá en el hash y sal por la mangosta local pasaporte.
Ahora, si no hay ningún error eso significa que el registro del usuario fue exitoso, por
lo que en este punto lo que haremos es decir si req.body.
Nombre de pila. Entonces, lo que significa que el cuerpo del mensaje de solicitud entrante,
si contiene el nombre,
entonces diremos user.firstname es igual a req.body.firstname.
Del mismo modo, para el apellido también.
Así que en este punto,
tendríamos al usuario disponible aquí.
Vea que el usuario está entrando como el segundo parámetro de esta función de devolución de llamada aquí.
Por lo tanto, estamos configurando el primer nombre cambiando
la propiedad de nombre dentro del documento de usuario aquí diciendo, req.body.firstname.
Si existe, entonces estableceremos el nombre del usuario en eso.
Del mismo modo, si el req.body.last name está disponible,
por lo que también actualizaremos el apellido del usuario como req.body.lastname.
Y una vez que hayamos hecho estos dos cambios en el nombre y el apellido,
entonces tenemos que guardar la modificación que hemos hecho al usuario.
Por lo tanto, acabamos de actualizar al usuario.
Entonces, diremos user.save, esto
devolverá el error o el usuario.
Por lo tanto, si la modificación se ha guardado correctamente,
entonces devolverá el error, de
lo contrario devolverá el valor de usuario y este pasaporte autenticará
lo haremos dentro de este usuario aquí.
Entonces, diremos, user.save (err, user).
Y luego también tenemos que cruzar la verificación para asegurarnos de que
si hay un error al guardar los cambios en el usuario,
entonces diremos el código de estado de res 500,
así que permítanme copiar esto desde allí.
Por lo tanto, diremos código de estado res 500,
res establecer el tipo de contenido de encabezado aplicación json y res.jason aquí.
Entonces, y volveremos a este punto.
Si no hay ningún error,
entonces, por supuesto, autenticar al usuario llamando a
autenticar pasaporte con el local para asegurarse de que
el registro del usuario ha sido exitoso
y esto debe hacerse correctamente y en qué caso devolverá este mensaje al lado del cliente.
Tenemos que cerrar este user.save aquí.
Por lo tanto, asegúrese de cerrar este extremo correctamente.
Entonces, user.save está cerrado aquí, y eso es todo.
Estos son los cambios que tenemos que hacer al usuario.
Por lo tanto, después de que el usuario esté registrado con el nombre de usuario dado y la contraseña dada,
luego de que el usuario se registre con éxito,
entonces estableceremos el campo
de nombre y apellido del documento de usuario utilizando estos dos aquí.
Queremos asegurarnos de que el usuario se ha
registrado correctamente antes de enviar el nombre y apellidos para eso. Por
lo tanto, es por eso que estamos llevando a cabo esta operación después de que el usuario
se registra con éxito. Eso es todo.
Vamos a guardar los cambios e ir a revisar el servidor.
Después de guardar los cambios,
vamos ahora a la terminal y
luego antes de iniciar el servidor,
permítanme primero revisar mi MongoDB y eliminar el usuario que nos hemos registrado anteriormente.
Entonces, diremos usar confusión y luego diremos db.usersfind.
Por lo tanto, sabemos que este usuario en particular se ha registrado anteriormente,
pero cuando registramos a ese usuario,
no registramos el nombre y apellidos del usuario.
Por lo tanto, voy a eliminar este usuario y luego volver a registrar al usuario.
Entonces, para hacer eso usando la ondulación de Mongo, diré que los usuarios de db caen,
y luego diremos que los usuarios de db encuentran,
y eso debería devolver un vacío.
No hay usuarios registrados allí y luego saldremos de la ondulación de Mongo.
Y así, una vez que hayamos eliminado ese usuario registrado,
entonces, permítanme iniciar mi servidor.
Y una vez que el servidor esté en funcionamiento,
vayamos a Postman y luego registremos
un nuevo usuario junto con el nombre y apellidos del usuario.
Luego, iniciarán sesión como ese usuario y luego veremos cómo
la población de Mongoose nos ayuda a rellenar la información sobre
el usuario automáticamente en el documento allí.
Ahora yendo a Cartero,
déjame hacer un registro de un nuevo usuario.
Por lo tanto, estoy haciendo una publicación localhost: 3000 usuarios se registran.
En el cuerpo del mensaje,
teníamos el nombre de usuario y la contraseña ya dentro.
Permítanme añadir dos campos adicionales:
nombre, apellido.
A continuación, registre ese usuario.
Por lo tanto, una vez que registre al usuario,
puede ver que el registro fue exitoso.
Ahora, déjame iniciar sesión como este usuario.
Por lo tanto, para iniciar sesión como usuario,
permítanme hacer una publicación y verificación cruzada para asegurarme.
Por lo tanto, estoy haciendo una publicación para que los usuarios inicien sesión.
Permítanme cruzar la comprobación y veo que el nombre de usuario y la contraseña están correctamente escritos allí.
Entonces, cuando inicio sesión,
debería iniciar sesión con éxito y debería poder obtener este token allí.
Debido a que este token es esencial para que podamos agregar en un plato a nuestro sitio de servidor.
Por lo tanto, después de obtener el token,
copie esta cadena de token y guárdela porque lo necesitará en
el encabezado de autorización para las
operaciones de publicación de poner y eliminar que va a realizar más adelante.
Así que déjame copiar ese token.
Ahora, normalmente la forma en que mantendría estos tokens es,
que simplemente abriré un documento de texto y luego lo copiaré y pegaré en el documento de texto.
Para que para las solicitudes posteriores de cartero,
simplemente puedo copiar esta cadena y luego
pegarla en el encabezado de autorización, si es necesario.
Entonces, déjame copiar ese token y aquí tengo un documento de texto abierto aquí.
Por lo tanto, voy a pegar esa cadena en este documento de texto.
Por lo tanto, aquí tenemos el token que hemos obtenido.
Vamos ahora a publicar un plato en nuestro servidor.
Volviendo al cartero,
déjame poner un plato en el servidor.
Por lo tanto, aquí es donde voy a elegir el puesto aquí.
Dentro de aquí, tengo la información de plato que había utilizado antes, pero para los comentarios,
ahora, recuerde que antes teníamos campo autor que estaba almacenando una cadena.
Por lo tanto, todos estos comentarios no son válidos.
Por lo tanto, voy a eliminar todos estos comentarios de la presentación porque,
ahora, esperamos que el usuario publique comentarios por su cuenta.
Cuando el usuario publique comentarios,
agregaremos automáticamente el ID del usuario en el campo de autor de los comentarios.
Así que, déjame publicar este plato aquí.
Ir al encabezado,
en el encabezado de autorización, voy a decir,
portador y luego, pegar el token y luego enviar.
Debería hacer un post sobre eso.
Entonces, diré post y así cuando publique ahora,
ves que este plato se ha publicado en el lado del servidor,
y con la matriz de comentarios está vacía en este momento.
Entonces, después de publicar este plato,
déjame copiar la identificación de este plato.
Por lo tanto, permítanme copiar este ID para el plato porque
necesitaré que para publicar comentarios para este plato.
Luego, yendo a mi editor de texto,
voy a guardar esa identificación del plato aquí.
Ahora, por supuesto, una vez que construya su lado cliente,
su cliente tendrá automáticamente toda esta información.
Por lo tanto, su cliente podrá enviar automáticamente el token y así sucesivamente.
Por lo tanto, no es necesario hacer esto de cortar y pegar, pero con el cartero,
esta es la única forma en que podemos agregar cualquier información a nuestras solicitudes de cartero,
que van del cartero al servidor.
Ahora, con el fin de convencernos de que este plato realmente existe,
permítanme obtener en el anfitrión local: 3000/platos.
Cuando hago un get, en realidad se puede ver que
este plato en particular existe en el lado del servidor.
Por lo tanto, vamos a tratar de publicar un comentario.
Entonces, para publicar un comentario,
hagamos un post y diremos,
localhost: 3000/platos, barra y la identificación del plato que
acabo de copiar, y recortar comentarios.
Cuando publique en los comentarios,
debe asegurarse de que en el cuerpo agreguemos el comentario aquí.
Por lo tanto, un comentario típico contiene
una calificación de digamos
cinco y luego comentario.
Así que, déjame escribir algún comentario aleatorio,
solo para demostrarte.
Por lo tanto, esto debería estar en el cuerpo de la publicación para los comentarios y en el encabezado,
deberíamos agregar el encabezado de autorización.
Por lo tanto, para el encabezado de autorización, diremos, portador.
Necesito pegar el token aquí,
pegando el valor del token que he guardado anteriormente.
Vamos a publicar este comentario.
Luego, cuando se publique el comentario,
veamos el valor devuelto aquí.
Por lo tanto, a medida que navega hacia abajo,
puede ver que el plato al que se ha agregado el comentario, ha sido devuelto.
Tenga en cuenta que la información del plato está allí, pero tenga en cuenta en particular,
lo que está contenido en el comentario que se ha publicado aquí.
Entonces, como puede ver, ya sabe que los
campos actualizados y creados en se agregan automáticamente por mangosta.
La calificación y el comentario que enviamos están
ahí, pero tenga en cuenta cómo el campo autor
contiene ahora el ID correspondiente al usuario.
Ahora, como vimos en el código cómo se agrega la información del campo de autor, ahora,
si usted hace un get en los platos,
se dará cuenta de que este campo de autor será
rellenado automáticamente por la información de los usuarios aquí.
Por lo tanto, vamos a hacer ahora un get en el localhost: 3000/platos.
Por lo tanto, cuando ahora hacemos un conseguir en este punto,
ahora se dará cuenta de que en los platos aquí,
justo allí, la información sobre el plato ya está
presente, pero tenga en cuenta cómo se construye el comentario.
El comentario ahora contiene,
los campos de comentarios de calificación como vimos anteriormente,
el actualizado y creado en,
pero tenga en cuenta lo que pasó con el campo de autor aquí.
Por lo tanto, cuando hace una solicitud get porque hicimos un relleno en
el lado del servidor cuando se invoca la operación get,
el poblado ha rellenado automáticamente la
información del autor en su posición en el campo de autor aquí.
Así que, allí, puede ver que desde el autor,
ahora puede buscar
automáticamente el apellido y la información del nombre desde el campo de autor.
Por lo tanto, si necesita construir un comentario,
ahora tiene la calificación,
el comentario y también el nombre y apellidos
del autor incluidos automáticamente en este documento.
Además, el nombre de usuario también se incluye en este documento.
Por lo tanto, así es como puede agregar información de otro documento y rellenar
un segundo documento con esa información antes de responder desde el sitio del servidor.
Por lo tanto, este es el uso de la población de mangosta y cómo
podemos llenar automáticamente la información en un documento de mangosta.
Con esto, completamos este ejercicio.
En este ejercicio, hemos visto el uso de la población de mangosta y también hemos visto
cómo podemos rellenar la información de un documento a otro documento. Por lo
cual, cuando modificamos el servidor para hacer la población para las solicitudes,
mangosta se encargará automáticamente de rellenar esta información para nosotros.
Todo lo que tenemos que hacer,
es almacenar la referencia al otro documento en forma de ID de objeto,
en el documento en el que desea rellenar esta información.
Con esto, completamos este ejercicio.
Este es un buen momento para que hagas un git-commit con el mensaje, población de mangosta.