Se encuentra usted aquí

Nodejs y Drupal

Imagen de Nicolás Moncada Henríquez

Nodejs es uno de los sistemas que más me ha llamado la atención por todas las aplicaciones que uno podría desarrollar, como un chat, reportes en tiempo real, juegos, etc. En pocas palabras nodejs es un sistema para programar en Javascript en el lado del servidor y esta orientado a eventos. Existen muchos tutoriales de como instalarlo con muchos ejemplos (este blog te podría servir).

El objetivo de este post es revisar la integración que ya existe entre Nodejs y Drupal, configurarlo y ver que partido le podríamos sacar.

El módulo Nodejs

El módulo, que ya esta disponible, es una base para comunicar Drupal con una aplicación desarrollado con Nodejs por medio de webservices. Esta aplicación viene adjunto en la carpeta del módulo y se llama server.js y ya tiene cientos de líneas de códigos para hacer la pega de integrarse con Drupal, por lo tanto no es necesario programar nada (Salvo que requieras hacer algo tan complejo, puedes extenderlo). De lo único que tenemos que preocuparnos es en ajustar las configuraciones.

El módulo viene con varios submódulos que podrían serte útil.

Configuración

Si bien aquí mismo te indican como configurar nodejs, igual voy a hacer un resumen:

  • Tienen que tener instalado en sus servidores Nodejs y npm (¿Puedo instalarlo en un Hosting? Lo dudo, ya que deben instalarlo por consola.)
  • Instalar los módulos de la aplicación nodejs (express, socket.io, request, connect. )
  • Se debe crear un archivo llamado nodejs.config.js en la carpeta del módulo que descargaron de drupal.(más adelante les daré un ejemplo)
  • Instalar el módulo en Drupal e ir a la página de configuración: admin/config/nodejs/config y completar los valores.
  • Instalar el módulo Nodejs Config para ingresar el servicesKey (Es un bug que tiene el módulo en si, pero nada grave.)

Entonces, veremos que debe tener nodejs.config.js, aquí indicamos el host en donde esta nuestro sitio en Drupal y el host nodejs

settings = {
  host: 'midominio.com', // o puede ser localhost
  port: 8080, // puerto por defecto.
  serviceKey: 'mikey', // este mismo debe ir en la configuración de Drupal (instalando el módulo nodejs config)
  backend: {
    port: 80, // El port por defecto que utiliza apache, pero si lo tienen en otro puerto, pues lo cambian.
    host: 'midominio.com', // definan el host en donde estará Drupal, puede ser localhost
    scheme: 'http',
    basePath: '', // Si su Drupal no esta en la raíz coloquen la ruta.
    messagePath: '/nodejs/message' // Esto viene por defecto.
  },
  debug: true // Con esto nodejs estará imprimiendo en consola todo lo que recibe y envía.
};

Una vez completado el nodejs.config.js, vamos a iniciar el servidor nodejs simplemente escribiendo en consola, desde la carpeta del módulo:

nodejs server.js

Debería salir:

Started http server.midominio.com
   info  - socket.io started

Probando integración con los Submódulos

Para probarlo podemos instalar el submódulo Nodejs Watchdog, tengan dos páginas abiertas, una en el dlog de Drupal y el otro para navegar por el sitio, por ejemplo ingresando a una página que no existe, crear un contenido, intentar identificarse en el sitio con un usuario que no existe, entre otros y debería aparecer en el dlog de manera instantánea.

El submódulo Nodejs Notifications es para enviarle un mensaje a todos los usuarios que estén conectados. Ejemplo:

Este mensaje aparecerá en el lado superior derecho a todos los usuarios (Deben estar atentos).

Un módulo custom para depurar Drupal con Nodejs

Utilizando el mismo concepto de Watchdog, se me ocurrió hacer lo mismo para depurar Drupal, normalmente usando print_r() o dump_var() podría ver los valores de una variable, pero se complica cuando quiero ver un arreglo u objeto muy grande en el proceso de un Ajax. Como solución existe una función del módulo Devel llamado dd(), el cual imprime la variable en un archivo ubicado en la carpeta temporal, muy útil pero poco práctico y muy lento, es por eso que nació la idea de usar Nodejs, en vez de imprimir la variable en un archivo, mejor imprimirlo en otra página de Drupal. Dado esta necesidad que se ha desarrollado un módulo haciendo exactamente lo que se plantea. Solo basta con instalarlo y dejar la página nodejs-debug abierta y en tu código usar la función nd().