Interactúa con la consola de Sails.js

Interactúa con la consola de Sails.js

Sabemos que sails es un framework que va creciendo día con día tanto en su desarrollo como su comunidad. A diferencia de antes, existe más documentación de la que solíamos ver en internet pues ahora hay mucha gente interesada en él. Por éste motivo decidí sacar provecho de algunas cosas que nos trae su hermosa consola interactiva.


Controladores.

Si necesitamos crear un controlador y no tenemos idea como hacerlo sails lo hace por nosotros. Veamos que tan sencillo es.

$ sails generate controller animal
info: Created a new controller ("animal") at api/controllers/AnimalController.js!

Ésto creará un archivo dentro de la carpeta api/controllers llamado AnimalController.js. Como puedes ver sails le agrega la palabra 'Controller' a dicho archivo.


Modelos.

Al igual que los controladores, sails también puede crear modelos de la siguiente manera.

$ sails generate model animal
info: Created a new model ("Animal") at api/models/Animal.js!

Con ésto sails creará un archivo llamado Animal.js dentro de la carpeta api/models.

A continuación vamos a abrir ese archivo para trabajar sobre él y le agregaremos un atributo, de tal forma que debe quedar mas o menos así.

/**
 * Animal.js
 *
 * @description :: TODO: You might write a short summary of how this model works and what it represents here.
 * @docs        :: http://sailsjs.org/documentation/concepts/models-and-orm/models
 */

module.exports = {
  attributes: {
  	nombre: {type: 'string'} // Agregar esto.
  }
};

Listo! Ya tenemos algo con que empezar a interactuar.


Consola interactiva.

Ahora que ya tenemos nuestro modelo Animal haremos pruebas con él. Entramos a la consola interactiva escribiendo lo siguiente.

$ sails console

Nos dará el mensaje de bienvenida y nos dice que si queremos salir del modo interactivo, tenemos que pulsar la combinación <CTRL>+<C>, esa combinación se hace dos veces.

Running node v4.7.2 (npm v2.15.11)

info: Starting app in interactive mode...

info: Welcome to the Sails console.
info: ( to exit, type <CTRL>+<C> )

sails>

Cuando se trabaja con el driver de conexión de datos por defecto o con el driver de mongodb, los modelos de sails permiten trabajar aún sin configurar sus atributos. Ésta funcionalidad sólo se recomienda en modo de desarrollo pero es necesario describir cada atributo por cuestiones de seguridad.


Find

Creamos una función anónima dentro del exec y dentro de ella escribiremos un console.log.

sails> Animal.find().exec(function(err, animal){ console.log(animal); });
sails> []

Sails nos regresa un arreglo vacío porque aún no tenemos datos. Hagámoslo de una manera más facil con un console.log pero sin función anónima.

sails> sails> Animal.find().exec(console.log);
sails> null []

Más fácil, ¿No?

Sails nos muestra null y []. Ésto sucede porque sails nos devuelve los resultados en dos variables dentro de esa función a como escribimos arriba (err y animal).

  • null: Se refiere a la variable de error. Si hubiera un error, esa variable nos devuelve una instancia de Error de javascript.
  • []: Se refiere a los datos. Ésto nos devolverá un arreglo vacío porque aún no tenemos nada.

Create

Sin explicar más, haremos las pruebas mucho más rápido.
Agregamos el primer animal.

sails> Animal.create({nombre: 'Pavo'}).exec(console.log);
sails> null { nombre: 'Pavo',
  createdAt: '2017-10-06T20:49:00.929Z',
  updatedAt: '2017-10-06T20:49:00.929Z',
  id: 1 }

El resultado es un objeto de nuestro nuevo registro. También vemos que hay unos campos llamados createdAt y updatedAt que nosotros no agregamos. No nos preocupemos, eso los agrega sails automáticamente.

Ahora sí. Creamos otro registro más.

sails> Animal.create({nombre: 'Gallina'}).exec(console.log);
sails> null { nombre: 'Gallina',
  createdAt: '2017-10-06T20:51:00.524Z',
  updatedAt: '2017-10-06T20:51:00.524Z',
  id: 2 }

Ya tenemos nuestros dos registros, vamos a listar nuestros registros creados. ¿Lo recuerdan? ¡Claro! Lo haremos con find. Ahora veremos que el find nos arroja datos.

// Find también permite busquedas personalizadas
// Animal.find({nombre: 'Pavo'})...
sails> Animal.find().exec(console.log);
sails> null [ { nombre: 'Pavo',
    createdAt: '2017-10-06T20:49:00.929Z',
    updatedAt: '2017-10-06T20:49:00.929Z',
    id: 1 },
  { nombre: 'Gallina',
    createdAt: '2017-10-06T20:51:00.524Z',
    updatedAt: '2017-10-06T20:51:00.524Z',
    id: 2 } ]

Update

Si nos interesa modificar un registro, lo haremos con update. Si necesitamos cambiar Pavo por Guajolote, existen dos maneras. Una es conociendo su id y la otra es con algún atributo, en éste caso sólo tenemos uno: su nombre. Éstas dos formas son de la siguiente manera.

$ Animal.find({id: 1}).exec(console.log);
$ Animal.find({nombre: 'Pavo'}).exec(console.log);

El método update funciona de la misma forma que find, pero acepta otro argumento más. Veamos un ejemplo.

$ Animal.update({id: 1}, {nombre: 'Guajolote'}).exec(console.log);

El primer objeto se refiere al criterio de búsqueda y el segundo objeto es el valor del atributo a modificar.

Update nos permite también hacer búsquedas con otros atributos. Aunque depende de lo que querramos hacer, no os recomiendo porque la búsqueda puede devolvernos más registros de lo que esperamos y serán modificados en la base de datos.

// Cuidado! Si existen muchos animales 'Pavo' se modificarán!!
sails> Animal.update({nombre: 'Pavo'}, {nombre: 'Guajolote'}).exec(console.log);

// Correcto!
sails> Animal.update({id: 1}, {nombre: 'Guajolote'}).exec(console.log);

Destroy

Con éste último, podríamos pasarle cualquier atributo del modelo. A como lo hace update, también pueden borrarse uno o más registros al mismo tiempo. ¡Mucho cuidado!

Como ejemplo y para hacer la búsqueda exacta de lo que queremos borrar, lo haremos con el id del registro.

sails> Animal.destroy({id: 1}).exec(console.log);
sails> null { nombre: 'Pavo',
  createdAt: '2017-10-06T20:49:00.929Z',
  updatedAt: '2017-10-06T20:49:00.929Z',
  id: 1 }

¡Y eso es todo! Ya pudimos interactuar nuestros modelos dentro de la consola interactiva; útil para hacer nuestras pruebas. Y para rematar, si ustedes acceden a su navegador a la dirección http://localhost:1337 también verán la aplicación de sails en funcionamiento aún interactuando con su consola.

Queda mucho por aprender de la consola, será en otro post.

Hasta la próxima. Bendiciones.