Navegando con Sails.js: un marco estilo MVC para Node.js

 

 

 

  • SmashingConf New York 2024
  • Smart Interface Design Patterns, 10h video + UX training

  • Índice
    1. Introducción
    2. Empezando
      1. Instalar Node.js
      2. Instalar velas
      3. Crear un proyecto
      4. Iniciar un proyecto
    3. Bucear en velas
      1. Componente de enrutamiento
      2. Capa de vistas
      3. Usando el motor de vistas personalizadas
      4. El controlador
      5. Rutas de sombra para acciones
      6. Capa de modelo
      7. Uso de la consola de Sails para probar los modelos

    En este artículo introductorio, Slava Fomin II le mostrará las partes más importantes del marco de Sails y le dará algunos ejemplos específicos para que pueda empezar. Por supuesto, si quieres utilizarlo en tu trabajo diario, tendrás que dedicar algo de tiempo a dominarlo y llevarlo al siguiente nivel. La buena noticia es que Sails viene con documentación bastante sólida y una comunidad activa. El creador de Sales incluso responde personalmente preguntas sobre StackOverflow. No confirmará ni negará que Sails está siendo desarrollado por un pulpo gigante e inteligente, pero hará todo lo posible para guiarte desde el humilde estandarte hasta convertirte en el confiado capitán de tu propio barco. No estarás solo.

     

    Había estado programando del lado del servidor con Symfony 2 y PHP durante al menos tres años antes de comenzar a ver algunos problemas de productividad. No me malinterpretes, me gusta bastante Symfony: es un marco maduro, elegante y profesional. Pero me he dado cuenta de que gran parte de mi valioso tiempo no lo invierto en la lógica empresarial de la aplicación en sí, sino en respaldar la arquitectura del marco.

    No creo sorprender a nadie diciendo que vivimos en un mundo acelerado. Todo el movimiento de startups es un recordatorio constante para nosotros de que, para lograr el éxito, debemos poder probar nuestras ideas lo más rápido posible.

     

    Cuanto más rápido podamos repetir nuestras ideas, más rápido podremos llegar a los clientes con nuestras soluciones y mayores serán nuestras posibilidades de lograr un producto que se ajuste al mercado antes que nuestros competidores o antes de que excedamos nuestro presupuesto limitado. Y para ello necesitamos instrumentos adecuados a este tipo de trabajo.

    Si está desarrollando una aplicación compleja con trescientas páginas de documentación para algún gran cliente corporativo y conoce la mayoría de sus detalles desde el principio, entonces Symfony 2 o algún framework Java empresarial probablemente sería la mejor herramienta para el trabajo. Sin embargo, si eres un desarrollador de startups o simplemente quieres probar algunas de tus ideas rápidamente sin comprometer la calidad general de la aplicación, entonces Sails (o Sails.js) es un candidato muy interesante a considerar.

    No confirmaré ni negaré que Sails está siendo desarrollado por un pulpo gigante e inteligente, pero haré todo lo posible para guiarte desde el humilde estandarte hasta convertirte en el confiado capitán de tu propio barco.

    Introducción

    Sails es un marco integral estilo MVC para Node.js diseñado específicamente para el desarrollo rápido de aplicaciones del lado del servidor en JavaScript. Su sólida arquitectura orientada a servicios proporciona diferentes tipos de componentes que puede utilizar para organizar claramente el código y separar responsabilidades. Y si es disciplinado, incluso es posible desarrollar una aplicación de nivel empresarial.

    Escrito en JavaScript, Sails le brinda el beneficio adicional de poder compartir su código entre el servidor y el cliente . Esto podría resultar muy útil, por ejemplo, para implementar la validación de datos donde necesita tener las mismas reglas de validación tanto en el cliente como en el servidor. Además, con Sails necesitas dominar un solo lenguaje de programación, en lugar de varios.

    Un concepto importante del marco es que envuelve una pila de componentes débilmente acoplados . Casi todos los aspectos del sistema son personalizables: puede agregar, eliminar o reemplazar la mayoría de los componentes principales sin comprometer la estabilidad general del marco. En otras palabras, si necesita realizar un trabajo lo más rápido posible, Sails lo ayudará proporcionándole componentes integrados robustos con valores predeterminados razonables; sin embargo, si desea crear una solución totalmente personalizada, Sails tampoco se interpondrá en su camino. Si ya está familiarizado con la filosofía detrás de la comunidad de desarrollo de Node.js, entenderá lo que quiero decir; si no, lo entenderás a lo largo de este artículo.

     

    Bajo el capó, Sails contiene probablemente el marco web más conocido para Node.js, Express. Express es un marco básico y muy simple. Proporciona lo básico para sus necesidades de desarrollo web. Para implementar una aplicación web seria con él, necesitará encontrar e integrar usted mismo una serie de componentes de terceros. Además, a Express realmente no le importa la estructura del código o el sistema de archivos de un proyecto, por lo que deberá administrarlo usted mismo y crear una estructura sensata. Ahí es donde Sails viene al rescate. Construido sobre el diseño robusto de Express, proporciona todos los componentes necesarios listos para usar y brinda a los desarrolladores una organización bien pensada para su código y archivos de proyecto. Con Sails, podrá iniciar el desarrollo con las herramientas integradas y documentadas.

    Creo que la mejor manera de entender algo es conocerlo y explorarlo de primera mano. Entonces, basta de hablar. ¡Tomemos el código y creemos nuestro primer proyecto local!

    Empezando

    Empezaré con borrón y cuenta nueva. Comencemos instalando todos los requisitos y la última versión de Sails.

    Estoy usando Ubuntu Linux, por lo que se presentarán todos los comandos para este sistema operativo. Ajústelos según su entorno de trabajo.

    Instalar Node.js

    Para instalar la última versión de Node.js en su máquina Ubuntu desde NodeSource Node.js Binary Distributions , simplemente ejecute estos tres comandos:

    # Make Sure cURL Is Available In The Systemsudo apt-get install -y curl# Adding NodeSource Repository To The System Via Provided Scriptcurl -sL https://deb.nodesource.com/setup_dev | sudo bash -# Actually installing The Node.js From The NodeSource Repositorysudo apt-get install -y nodejs

    Puede confirmar que Node.js se ha instalado correctamente utilizando este comando:

    node --version

    Debería generar algo como v0.12.4.

    Nota: Si no está utilizando Ubuntu, consulte las instrucciones de Joyent sobre cómo instalar Node.js en diferentes plataformas .

    Instalar velas

    El siguiente comando instalará Sails globalmente:

    sudo npm -g install sails

    Puede probar si el marco se instaló con este comando:

    sails --version

    Debería mostrar el número de la última versión estable de Sails.

    Crear un proyecto

    Creemos el proyecto de prueba con el que experimentaremos:

    sails new sails-introductioncd ./sails-introduction

    Iniciar un proyecto

    El aspecto más interesante de Node.js es que la aplicación no requiere un servidor web externo para funcionar. En el mundo de Node.js, la aplicación y el servidor web son lo mismo. Cuando ejecuta su aplicación Sails, se vincula al puerto determinado y escucha las solicitudes HTTP. Todas las solicitudes son manejadas en el mismo proceso del sistema operativo de forma secuencial por su aplicación. (Por el contrario, Apache generará múltiples subprocesos o subprocesos y cada solicitud tendrá su propio espacio de contexto).

    Entonces, ¿cómo puede su aplicación atender múltiples solicitudes sin que esas solicitudes se bloqueen notablemente entre sí? La clave para esto es una característica importante de Node.js: la asincronosidad . Todas las operaciones pesadas, como E/S y acceso a bases de datos, se realizan de forma asincrónica sin bloqueo. Cada método asincrónico le permite especificar una función de devolución de llamada, que se activa tan pronto como se completa la operación solicitada. El resultado de la operación (o descripción del error) se pasa a su función de devolución de llamada. De esa manera, su aplicación puede delegar todo el trabajo pesado y continuar con su propio negocio, regresar más tarde para recopilar los resultados y continuar donde lo dejó.

     

    Nota: El enfoque más conveniente y moderno es utilizar promesas en lugar de funciones de devolución de llamada, pero eso está fuera del alcance de este artículo. Consulte el artículo de Jake Archibald para obtener más información sobre el tema.

    Comencemos nuestro proyecto para ver que todo funciona bien. Simplemente ejecute lo siguiente:

    sails lift

    Sails inicializará la aplicación, se vinculará al puerto configurado y comenzará a escuchar las solicitudes HTTP.

    Nota: Cuando se levante su aplicación, la ventana de la terminal estará en estado bloqueado. Puede presionar Control + Cpara finalizar la aplicación y regresar al símbolo del sistema.

    Ahora podrá abrir la aplicación predeterminada en su navegador favorito visitando https://localhost:1337/ .

    En este punto, la página predeterminada debería cargarse correctamente.

    Bucear en velas

    Ahora, analicemos nuestro proyecto para comprender qué lo motiva.

    Sails es un marco MVC, por lo que tiene sentido partir de estos componentes para ver qué los une a todos.

    El punto de entrada a nuestra aplicación es el app.jsarchivo, que se encuentra en la raíz del proyecto. Podrías llamarlo controlador frontal si lo deseas; sin embargo, no tendría sentido editar su contenido. Todo lo que hace es requerir dependencias de alto nivel y darle control al propio Sails. Después de eso, toda la magia ocurre en el marco.

    Componente de enrutamiento

    Cuando Sails recibe una solicitud HTTP, en realidad utiliza su componente de enrutador para encontrar el controlador responsable de generar la respuesta. La coincidencia del enrutador se puede controlar a través de un archivo de configuración especial ubicado en config/routes.js. Si abre este archivo ahora, verá que contiene solo una entrada:

    module.exports.routes = { '/': { view: 'homepage' }};

    Nota: El proyecto predeterminado de Sails contiene muchos comentarios, que se introdujeron específicamente para acelerar las configuraciones del proyecto y facilitar la curva de aprendizaje. Siéntase libre de eliminarlos si lo desea. Ningún fragmento de código de este artículo contendrá comentarios integrados para preservar el espacio y mejorar la legibilidad.

    La parte izquierda de la expresión, ’/’es el patrón de URL que le indica a Sails que la siguiente configuración (la parte derecha) debe usarse para una página de índice. La viewpropiedad de la configuración contiene el homepagevalor, que es el nombre de la vista (la V en MVC).

     

    Capa de vistas

    Las vistas son manejadas por un componente separado del marco. Con la ayuda del paquete Node.js “Consolidate”, Sails admite al menos 31 lenguajes de plantillas diferentes . Así que elige el idioma que mejor se adapte a ti, a tu proyecto y a tu equipo.

    Todas las plantillas se encuentran en el viewsdirectorio de su proyecto. Allí encontrará el views/homepage.ejsarchivo de plantilla mencionado anteriormente que se utiliza para representar la página de inicio y podrá jugar con él si lo desea.

    Nota: Todas las plantillas se procesan dinámicamente en el servidor. No necesitará reiniciar Sails para actualizar las plantillas modificadas. Todos los cambios se mostrarán inmediatamente después de que se actualice la página. ¡Intentalo!

    Si miras la homepage.ejsplantilla, notarás que no está completa. Faltan elementos HTML básicos, como las etiquetas DOCTYPE, . Esto es a propósito. Las partes más reutilizables de la plantilla se extraen en un archivo de plantilla independiente, . El nombre de la plantilla de diseño se configura en el archivo (busque la propiedad). Esto realmente ayuda a mantener las cosas SECO. Sin embargo, si necesita utilizar otro diseño para alguna página en particular, puede anular fácilmente la propiedad dinámicamente en su controlador.htmlhead bodyviews/layout.ejsconfig/views.jslayout

    Tenga en cuenta que esta configuración de diseño solo funciona para el sistema de plantillas EJS predeterminado y no funcionará con otros idiomas. Esto se hace con el fin de lograr compatibilidad heredada y con versiones anteriores. Se recomienda utilizar la funcionalidad de diseño proporcionada por el lenguaje de plantillas de su elección. Por ejemplo, en Twig y Jinja2, puedes usar la extendsexpresión para extender una plantilla principal y sobrecargar los bloques necesarios.

    Usando el motor de vistas personalizadas

    Esta sección demuestra cómo cambiar el motor de vistas que se utiliza para representar plantillas en Sails. Esto debería darle una idea de lo fácil que pueden ser anuladas y personalizadas algunas partes de Sails. Voy a utilizar el lenguaje de plantillas Twig/Jinja2, debido a su flexibilidad y extensibilidad. Lo he estado usando durante al menos tres años y el idioma nunca me ha limitado de ninguna manera. Así que te recomiendo que lo pruebes.

    Nota: Twig y Jinja2 son una familia común de lenguajes de plantillas con las mismas funciones y características principales. Sin embargo, cada implementación concreta puede tener sus propias pequeñas diferencias y matices. Usaré la biblioteca Swig durante el transcurso de este artículo. Proporciona una implementación concreta de la sintaxis de plantillas Twig y Jinja2 para Node.js. Consulte la documentación oficial de Swig para obtener más detalles. Ratones para gaming

    Como dije antes, los delegados de Sails ven la representación en el paquete Node.js llamado "Consolidar". En realidad, este paquete consolida alrededor de 30 motores de visualización diferentes. Usaré el motor de visualización Swig, que implementa soporte para los lenguajes de plantillas Twig y Jinja2. Para usarlo, tendré que completar unos sencillos pasos:

     

    1. Defina dependencias e instale el paquete Swig: npm install --save swig.
    2. Cambie un poco la configuración de Sails editando el config/views.jsarchivo. Todo lo que necesitas hacer es establecer la enginepropiedad en swig.
    3. Reescriba todas las plantillas del formato EJS a Twig y Jinja2. ¡No olvides cambiar la extensión a .swig!
    4. Vuelva a cargar el servidor de Sails.

    Nota: Para ver los cambios, deberá volver a cargar la aplicación finalizando el servidor y luego levantándolo nuevamente.

    Una respuesta en Stack Overflow brinda algunas pistas sobre cómo se puede automatizar esto.

    El contenido de todos los archivos modificados se proporciona a continuación para su referencia.

    configuración/vistas.js:

    module.exports.views = { engine: 'swig'};

    vistas/diseño.trago:

    !DOCTYPE htmlhtml head meta charset="utf-8" title{{ title|default('The Default Title') }}/title /head body {% block body %}{% endblock %} /body/html

    vistas/página de inicio.swig:

    {% extends 'layout.swig' %}{% set title = 'Homepage Title' %}{% block body %} h1Homepage!/h1 pWelcome to the homepage!/p{% endblock %}

    vistas/404.trago:

    {% extends 'layout.swig' %}{% set title = 'Page Not Found' %}{% block body %} h1{{ title }}/h1{% endblock %}

    El contenido de 403.swigy 500.swiges casi el mismo que el 404.swigpresentado anteriormente. Dejaré que usted arregle los archivos usted mismo.

    El controlador

    Bien, hemos analizado los componentes de rutas y vistas, pero ¿dónde está la parte del controlador del MVC? En realidad, el proyecto Sails predeterminado es tan simple que no requiere ninguna lógica personalizada. Si abres el api/controllersdirectorio, verás que está vacío.

    Como habrás adivinado, Sails puede incluso funcionar sin controlador; la configuración de enrutamiento puede especificar la vista directamente, sin la necesidad de un controlador. Esta podría ser una característica útil para páginas estáticas que no requieren ninguna entrada por parte del usuario ni ningún procesamiento adicional, como es el caso de nuestra página de inicio en este momento. Pero solucionemos esta deficiencia e introduzcamos algo de lógica empresarial en nuestra ruta.

    Creemos un nuevo controlador para nuestra página de inicio con el siguiente comando:

    sails generate controller homepage

    Sails generará un archivo para usted, api/controllers/HomepageController.js.

    Podemos abrir este archivo e introducir una nueva acción para nuestra página de inicio. Lo llamaré index:

    module.exports = { index: function (request, response) { return response.view('homepage', { currentDate: (new Date()).toString() }); }};

    Esta simple acción simplemente representará nuestra homepagevista que discutimos anteriormente y le pasará una variable adicional llamada currentDate, que contendrá la presentación textual de la fecha actual.

    Nota: La acción del controlador es una función JavaScript simple que acepta dos argumentos: el especial requesty responselos objetos. Estos objetos corresponden directamente a los objetos proporcionados por el marco Express. Consulte la documentación de Express para conocer los detalles de la API.

     

    Para que Sails realmente use nuestro controlador, necesitamos modificar ligeramente la configuración de enrutamiento en el config/routes.jsarchivo:

    module.exports.routes = { '/': 'HomepageController.index'};

    Aquí le estamos diciendo al sistema que le dé el control de la solicitud a nuestro HomepageControllery, específicamente, de su indexacción. Ahora, el controlador es responsable de manejar la solicitud y generar la respuesta.

    Además, no olvide agregar la siguiente línea a views/homepage.swig:

    pCurrent date is: {{ currentDate }}/p

    Esto generará la cadena de fecha pasada desde el controlador.

    Ahora, recarga el servidor y actualiza la página. Deberías ver los cambios.

    Rutas de sombra para acciones

    De forma predeterminada, Sails generará rutas implícitas (también llamadas rutas sombra ) para cada acción del controlador. La URL generada se verá así /:controller/:action. En nuestro caso será https://localhost:1337/homepage/index . Aunque esta característica puede ser útil, a veces no es deseada (como cuando obtienes dos URL para una página de inicio, como en nuestro caso).

    Puede controlar este comportamiento configurando el blueprintscomponente, lo que se puede realizar en dos lugares. El primer lugar y el más obvio es el config/blueprints.jsarchivo de configuración. Puede desactivar las rutas de acción oculta para una aplicación completa configurando la actionsopción en false:

    module.exports.blueprints = { actions: false};

    Sin embargo, para deshabilitar las rutas ocultas para un solo controlador, deberá configurarlo en el propio controlador api/controllers/HomepageController.js:

    module.exports = { _config: { actions: false }, index: function (request, response) { return response.view('homepage', { currentDate: (new Date()).toString() }); }};

    La opción especial _configdel módulo del controlador le permite proporcionar una configuración personalizada para un controlador específico.

    Capa de modelo

    La última parte del paradigma MVC es el modelo. Sails viene con un componente ORM/ODM avanzado llamado Waterline. Inicialmente se diseñó como parte del marco de Sails y luego se extrajo en un módulo Node.js separado que ahora se puede usar de forma independiente.

    Waterline proporciona una capa de abstracción que conecta su aplicación a una amplia variedad de bases de datos de forma transparente y fluida. La idea principal es que usted definiría el modelo de dominio de su aplicación como un conjunto de entidades relacionadas (objetos JavaScript) y que las entidades se asignan automáticamente a las tablas y/o documentos subyacentes de la base de datos. El aspecto interesante de Waterline es que admite entidades relacionadas entre varias bases de datos. Por ejemplo, podría almacenar usuarios en la base de datos PostgreSQL y pedidos relacionados en MongoDB; la capa de abstracción podría buscarlos por usted sin que usted siquiera note la diferencia.

     

    La línea de flotación es un componente bastante importante y no puedo cubrirlo por completo en este artículo introductorio, pero intentaré darte una idea.

    Supongamos que estamos creando una aplicación sencilla para gestionar contactos. Nuestra aplicación tendrá sólo dos tipos de entidades: una persona y su información de contacto. El usuario final podría crear una persona y agregarle varios detalles de contacto.

    Cada sistema de base de datos independiente que utilizaría en su proyecto Sails requiere una especificación de conexión. Las conexiones se configuran en el config/connections.jsarchivo. Voy a utilizar un tipo de base de datos especial llamado sails-disk. Este adaptador de base de datos está integrado en Sails y almacena todos los datos en un archivo JSON simple. Esto puede resultar muy útil cuando estás empezando a diseñar una aplicación y aún no has seleccionado o implementado un servidor de base de datos real.

    Abramos ahora el config/connections.jsarchivo y configuremos nuestra conexión:

    module.exports.connections = { main: { adapter: 'sails-disk' }};

    Esta breve configuración es suficiente para el sails-diskadaptador. Sin embargo, en un escenario del mundo real, deberá proporcionar todos los detalles necesarios para conectarse al sistema de base de datos de su elección, por ejemplo, el nombre del host, el número de puerto, el nombre de la base de datos, el nombre de usuario, etc.

    Además, necesitaríamos configurar la capa del modelo para usar la conexión especificada de forma predeterminada para cada modelo que definamos. Abra el config/models.jsarchivo y cambie su contenido a lo siguiente:

    module.exports.models = { connection: 'main', migrate: 'alter'};

    La migratepropiedad controla cómo Sails reconstruye el esquema en su base de datos subyacente cuando cambia la definición de un modelo. Cuando está configurado en alter, Sails intentará actualizar el esquema sin perder ningún dato cada vez que se inicie la aplicación. También podría dropser una opción viable en algunos casos; entonces, Sails simplemente recreará el esquema cada vez que se levante la aplicación. En un entorno de producción, Sails utilizará la safeopción, que no realizará ningún cambio en el esquema. Esto realmente ayuda a proteger los datos frágiles en la base de datos de producción. En modo seguro, deberás ejecutar la migración manualmente. migrateTambién es posible dejar la opción sin definir. En este caso, Sails le pedirá una opción interactiva cada vez que sea necesaria una migración.

    Ahora estamos listos para definir nuestros modelos. Utilicemos el generador integrado de Sails para crear archivos de modelo para nosotros. Simplemente emita estos comandos:

    sails generate model personsails generate model contact

    Sails creará dos archivos básicos. Editémoslos.

    Primero, abra el api/models/Person.jsmodelo generado y edítelo:

    module.exports = { attributes: { firstName: { type: 'string', size: 128, required: true }, lastName: { type: 'string', size: 128 }, contacts: { collection: 'Contact', via: 'person' } }};

    Aquí, estamos definiendo tres campos: firstNamey lastNamela contactscolección para contener los datos de contacto. Para definir una relación de muchos a uno entre dos modelos, necesitamos utilizar dos propiedades especiales. La collectionpropiedad tiene el nombre del modelo relacionado. La viapropiedad le dice a Waterline qué campo del modelo relacionado se utilizará para asignarlo a este modelo. Con suerte, esto se explica por sí mismo.

     

    Además, la sizepropiedad especifica la longitud máxima de la cadena en la columna de la base de datos y la requiredpropiedad especifica qué columnas no pueden contener valores nulos.

    Editemos el segundo modelo en el api/models/Contact.jsarchivo:

    module.exports = { attributes: { type: { type: 'string', enum: ['mobile', 'work', 'home', 'skype', 'email'], required: true, size: 16 }, value: { type: 'string', size: 128, required: true }, person: { model: 'Person', required: true } }};

    Aquí, estamos definiendo otros tres campos más. El typecampo contendrá el tipo de información de contacto. Podría ser un número de móvil, un número de teléfono de casa, un número de trabajo, etc. La enumpropiedad adicional especifica la lista de valores aceptados para este campo. El valuecampo contiene el valor correspondiente. Y el personcampo mencionado anteriormente asigna el contactmodelo a su personmodelo principal a través de la propiedad especial model.

    Nota: No definimos ninguna clave principal ni campo de identificación en nuestros modelos. Waterline maneja eso por nosotros automáticamente. La forma del valor del ID dependerá del adaptador de base de datos que se utilice porque cada sistema de base de datos utiliza diferentes estrategias para generar claves únicas.

    Además, Waterline creará dos campos adicionales para cada modelo, llamados createdAty updatedAt. Estos campos contienen las fechas de cuando se creó y actualizó la entidad, respectivamente.

    Este comportamiento se puede configurar a través de las opciones del modelo .

    Uso de la consola de Sails para probar los modelos

    Sails ofrece una consola interactiva muy agradable que sumerge al desarrollador en la profundidad del contexto de una aplicación y que ejecuta cualquier código JavaScript que desee.

    Los modelos ahora están definidos y podemos usar la consola de Sails para probarlos y aprender algunas API básicas de Waterline.

    Ejecute el siguiente comando para iniciar la consola de Sails:

    sails console

    Una vez iniciada la consola, podemos escribir y ejecutar algo de JavaScript en el contexto de nuestra aplicación. Esta es una forma rápida de probar algunos aspectos de un proyecto.

    Primero, creemos algunas entidades. Simplemente escriba el siguiente código en la consola de Sails y ejecútelo:

    Person.create({ firstName: 'John', lastName: 'Doe' }).exec(console.log);

    Este Persones el modelo que definimos anteriormente (Sails expone todos los modelos globalmente para su conveniencia). Es create()el método que crea nuevas entidades de los modelos especificados; toma un objeto con los valores del campo como argumento. Asegúrese de especificar correctamente todos los campos obligatorios. Finalmente, el exec()método realmente ejecuta las operaciones requeridas en la base de datos subyacente. Se necesita un único argumento, la función de devolución de llamada, que se llamará cuando se complete la acción. La entidad creada se le pasa como segundo argumento. Estamos utilizando la console.logfunción conveniente aquí para enviar la entidad recién creada a la consola.

    El resultado debería verse de la siguiente manera:

    { firstName: 'John', lastName: 'Doe', createdAt: '2015-05-07T22:01:26.251Z', updatedAt: '2015-05-07T22:01:26.251Z', id: 1}

    Vea cómo se asignó la identificación única a la entidad y se agregaron campos adicionales con las fechas reales.

    A continuación, creemos dos contactos:

    Contact.create({ type: 'mobile', value: '+7 123 123-45-67', person: 1 }).exec(console.log);Contact.create({ type: 'skype', value: 'johndoe', person: 1 }).exec(console.log);

    Asegúrese de especificar el personcampo obligatorio con el valor de ID adecuado. De esta forma Waterline sabrá relacionar las entidades entre sí.

    Lo último que debe hacer es recuperar la persona creada, así como la colección de sus contactos secundarios:

    Person.find(1).populate('contacts').exec(console.log);

    El find()método busca entidades del modelo especificado; al pasar 1a él, le decimos a Waterli






    Tal vez te puede interesar:

    1. ¿Deberían abrirse los enlaces en ventanas nuevas?
    2. 24 excelentes tutoriales de AJAX
    3. 70 técnicas nuevas y útiles de AJAX y JavaScript
    4. Más de 45 excelentes recursos y repositorios de fragmentos de código

    Navegando con Sails.js: un marco estilo MVC para Node.js

    Navegando con Sails.js: un marco estilo MVC para Node.js

    SmashingConf New York 2024 Smart Interface Design Patterns, 10h video + UX training Índice Introducción

    programar

    es

    https://aprendeprogramando.es/static/images/programar-navegando-con-sails-875-0.jpg

    2024-05-20

     

    Navegando con Sails.js: un marco estilo MVC para Node.js
    Navegando con Sails.js: un marco estilo MVC para Node.js

    Si crees que alguno de los contenidos (texto, imagenes o multimedia) en esta página infringe tus derechos relativos a propiedad intelectual, marcas registradas o cualquier otro de tus derechos, por favor ponte en contacto con nosotros en el mail [email protected] y retiraremos este contenido inmediatamente

     

     

    Top 20