¿Cual es el alcance de nodejs?

bornex

Buenas a todos, hace poco me he iniciado en el mundo de JavaScript y la verdad que me ha fascinado. He usado nodejs con express para hacer un pequeño servidor HTTPS y un par de cosas más de juguete (soy un total ignorante de JS y de node). Las preguntas vienen ahora:

¿Qué uso se le puede dar a nodejs?

¿Es posible hacer aplicaciones web completas como con Java, PHP, .NET? ¿Existe ORM para nodejs?

Supongo que alguna pregunta será estupida, pero pregunto porque seguro que vosotros sabeís mas que yo y podéis contestarme. Un saludo.

AkroS

Para una aplicación completa se puede usar el MEAN stack que es la unión de MongoDB, Express, Angularjs y Nodejs. Todo javascript de principio a fin.
Sobre ORM, no tengo mucha idea, solo se que existe Waterline que es implementado por Sails.js, un framework para nodejs.

Básicamente, para cualquier cosa que se te ocurra habrá un framework de javascript xD y el uso está en tu creatividad.

2 respuestas
ke2g

Básicamente lo que dice #2. ORM también hay model de geddy (otro framework). Pero sin duda me quedo con Waterline y Sails.

Muchas empresas importantes (como paypal, ebay, yahoo, yammer...) están utilizando node, es decir que puedes hacer lo que te salga de los huevos mientras lo diseñes bien.

1 respuesta
bornex

Entonces, recomendadme algun framework MVC :) #2 #3

1 respuesta
ke2g

#4 depende de que quieras hacer y como lo quieras hacer.
Si quieres Mongo, Express, Angularjs y Nodejs sin duda MEAN.
Sails también muy buena opción para REST aunque yo lo he utilizado para aplicaciones web con EJS y no tengo ninguna queja.
Para realtime existe Socketstream.
Finalmente Express si simplemente quieres una estructura básica. Algunos frameworks (por ejemplo sails) por debajo utilizan express.

EDIT: si no tienes nada en mente y lo que quieres es probar node, yo te recomiendo Sails. Es el que más flexibilidad te va a dar y más opciones a la larga.

Foxandxss

Hey,

Si eres novato con el mundo node, harías bien en no salirte de Express. Express está bien (yo quizá elegiría otras cosas, pero yo tengo necesidades distintas).

Ahora mismo yo no tocaría Sails. Sails está muy bien, pero lleva un tiempo estancado.. Yo conozco a su creador y ese chaval es un crack, pero está siempre en 2000 fregados y técnicamente han elegido a otro grupo de gente para que mantenga Sails, pero todavía no he visto nada. Sails ya digo que mola, pero lo veo demasiado descuidado.

La ventaja que tiene Express (para ti) es que tiene muy mucha documentación. Hay muchos libros, muchas muchas librerías, muchísimos ejemplos...

Hay muchas librerías para hacer backends con node, pero la más conocida y usada es Express. Una vez sepas bien express, la filosofía detrás de los middleware, un poco como funciona la asincronía en node y más javascript, podrías mirar ya si quieres Sails. Sails no es un reemplazo de express, es solo moldear un poco express para que parezca a Rails.

Y poder puedes hacer lo que quieras con node, y más. Con node puedes hacer servidores web, servidores de red, herramientas, incluso montar algo de apoyo para una aplicación de frontend, balancear la carga de forma muy sencilla... Es una apuesta segura.

Sobre ORM, si vas a tirar por el SQL (vamos, que no quieres mongo y similares) la mejor opción es Sequelize. Waterline está muy bien también, pero sigue verdecillo.

Personalmente yo haría 3 cosas:

Aprender Javascript: Como trabajar con "prototype", closures...

Aprender Node: Qué es node, como funciona node, crear servidores http simples sin express ni nada (para aprender como funciona todo por debajo), la asincronía, los flujos (streams)... También cosas no relacionadas con node en sí, pero útiles como promises.

Aprender Express: Express es casi la base de cualquier otro framework más grande de node. Express es realmente una fina capa por encima de node para hacer las cosas más amenas y quitar mucho boilerplate.

Si puedes leer ingles técnico, podría recomendarte alguna cosa que otra.

EDITO: Aunque no sea sobre node o backend, si te mola javascript y también te metes a frontend, no aprendas jQuery.

2 1 respuesta
bornex

#6 La idea que tengo es usar node principalmente porque es rápido, muy rápido. No tengo mucha idea de JS en general, pero me estoy poniendo al día. Pero te voy a preguntar ya que sabes bastante, ¿dónde hay algo de calidad para aprender Express? (no importa si es inglés técnico). Recomiendame :P

En cuanto al SGBD que voy a usar me es indiferente, pero me decantare por MongoDB. He visto algunos frameworks para MVC como Derby y alguno que otro más.

Lo que quiero hacer es un servicio web REST para una copistería, que atienda peticiones de Android e iOS de clientes para imprimir. Creo que Node es lo que buscamos para el proyecto, corregidme si me equivoco en esto.

Para frontend ¿qué me recomiendas, si no es jQuery?

2 respuestas
Foxandxss

#7 Hay 2 cosas. Puedes aprender BIEN node, su filosofía, como trabajar con el, hacer cosas a ""bajo"" nivel para ver como funcionan, o puedes obviar todo eso y aprender Express del tirón.

Yo personalmente haría primero eso, y me leería Node In Action. Es un LIBRACO, a mi me encantó.

Te enseña un poco la filosofía de Node, qué ventajas te ofrece (por ejemplo para aplicaciones en tiempo real, para lo cual te enseña a construirte tu propio chat con multiples salas), fundamentos de node...

Luego te enseña (para mi la mejor parte), a crear páginas web con node, solo node. Eso te enseñará realmente como funciona todo por debajo, como trabaja node con las peticiones y respuestas (request, response) y crear simples páginas, crear REST, paginas con formularios... No cosas muy útiles pero te enseñarán como funcionan las cosas "por dentro".

También enseña Connect, connect es una librería que express usaba antiguamente. Básicamente te enseñará un poco la filosofía de express (los middleware) e incluso implementar esa filosofía tu a mano para aprender mejor.

Te enseña un poco de express (es la versión 3 de express, así que si lees el libro y haces los ejemplos, te recomiendo encarecidamente que uses las versiones que te aconseja el libro (o su codigo fuente) para que no tengas problemas).

Luego enseña alguna cosa más avanzada.

Una vez sepas bien node, o decidas saltarte esto, yo leería Mastering Web Application Development with Express. Un libro que curiosamente empezó teniendo mala critica en amazon, pero que a mi me sorprendió muchísimo. No solo te enseña express, si no que además te lo enseña de una forma muy especial para entenderlo mejor.

Yo creo que con estas 2 lecturas (al menos por ahora) tienes para coger un buen nivel sobre el tema.

Olvidate de Derby, jamás he conocido a nadie que haya usado eso.

Si vas a usar mongo, te recomiendo mongoose. Estoy casi seguro que en uno de estos dos libros te enseñarán a usarlo si o si.

Sobre tu aplicación, sí, node (y realmente cualquier otra cosa) te viene bien para el proyecto. El segundo libro tiene un muy buen tema dedicado al REST, con buenos consejos e ideas.

Realmente necesitas escribir una pequeña aplicación REST (son su sistema de autentificación) que responda a ciertas peticiones y devuelva de tu mongodb pues lo que necesite. Eso es super básico y simple de hacer.

Sobre lo de frontend... Node es capaz de hacer aplicaciones completas por si mismo (usando cualquier sistema de plantillas de HTML (no uses jade por favor)), pero es bien cierto que ahora se lleva más el tener un backend solo para REST y luego alguna aplicación de frontend que usará dicho backend para sus peticiones.

Sobre qué frontend usar, angular, react, ember... Y en mi opinión en ese orden, pero realmente el que más coraje te de.

Para tu app tienes que ver las distintas "partes"

Una parte es el backend, ahi elegimos node. Este node será capaz de recibir peticiones y devolver los resultados acordes. También encargado de la autentificación y echar para atrás a quien no pueda usarla.

Va a tener algún cliente web? Quizá un admin o una página para hacer peticiones al backend. Si es así, te montas un angular, react o lo que sea. Por supuesto como aplicación totalmente independiente al node.

Clientes android e IOS. Aquí ya pues también lo que veas. O te montas 2 aplicaciones nativas para cada uno, las cuales hagan peticiones al node para trabajar, o puedes usar cordova para hacer aplicaciones hibridas (medio nativas, medio web) con la ventaja de programar solo una y que funcione para android e IOS a la vez. Aquí es bastante recomendable usar Ionic (cordova + angular) pues se lo están currando la vida y le están metiendo muy muchas optimizaciones para que parezca nativo.

No sé que más decirte, pregunta si tienes más dudas.

10 4 respuestas
HeXaN

#8 Me encantan tus tochacos, de los pocos que leo en esta web.

1 respuesta
Foxandxss

#9 Como que escribir es lo que me está dando más de comer. Empiezo a escribir y no termino en un mes.

bornex

#8 Brutal!, muchas gracias por la guía tío. Los libros los voy a sacar de la biblio de la uni a ver si están y si no, me los compro.

Me olvido de Derby, perfecto. Voy a seguir tu consejo y cogeré el camino para aprender nodejs desde el inicio y lo más profundamente que pueda.

Me has respondido a todo y de una manera perfecta, joder, gracias :). Por otro lado, AngularJS ¿con la documentación que hay podré tirar? ¿o me leo algún libro?

1 respuesta
Foxandxss

#11 No sé que capacidad tienes, ni las necesidades de ese proyecto, pero quizá aprender 20 cosas a la vez te vaya a volver loco.

Si realmente necesitas aprender angular, yo tiraría por egghead.io, thinkster.io (en concreto empezar por: https://thinkster.io/a-better-way-to-learn-angularjs/)

Con eso te da para lo básico. También puedes consultar mi blog (http://angular-tips.com), los primeros artículos te ayudarán con lo básico, pero échale un ojo al blog cuando ya sepas lo básico de angular.

Haces bien en aprender node desde el inicio, es muy util ver como las cosas funcionan por dentro, hacer los ejemplos de los libros para implementar tu propias infraestructuras básicas y luego ver dichas infraestructuras en Express y entender el cómo funcionan.

De nada vale que te digan... En express puedes hacer algo así:

var app = express();

app.use(bodyParser());
app.use(sessions());
app.use(...);

Y luego te digan... Gracias a eso tu aplicación podrá parsear los datos de un form que le envíen y tendrá sesiones. Hombre, si, con eso sales del paso y podrás hacer aplicaciones, pero no estás entendiendo qué es eso.

Yo ahora te digo... eso es aplicar middlewares y básicamente en cada petición ejecutará todas esas funciones una por una modificando tanto la petición como la respuesta (request, response) para conseguir el resultado que necesitas.

Oye, ya algo mejor lo entiendes. Si ahora te explico como crear tu propio manager de middlewares (son 30 lineas de codigo), podrás aprender BIEN como funciona ese código anterior (el segundo libro te lo explica haciendo tu propia versión).

Peor es si decides saltarte node y express y te metes con Sails. Sails usa express de fondo, tiene todo su manager de middlewares y demás, pero es totalmente transparente para ti. Yo te digo, crea un fichero con este nombre en esta carpeta y ya funciona todo. Sí, está super bien que por convenciones te ahorres de escribir código, pero si eres novato en esta plataforma, terminarás sabiendo jugar a los puzzles pero sin entender el por qué funciona. Eso es malo cuando Sails te da problemas y necesitas tocar sus entrañas un poco para solucionarlo, y se de buena tinta que eso es el pan de cada día.

La ventaja de Express para mi gusto (después de usar tantos frameworks grandes) es que solo incluyes lo que necesitas. ¿Que no quieres sesiones? Quitas el middleware y ya no hay sesiones (mejor dicho, no lo añades). Sails te mete 20 middlewares ya para ti, y cada vez que inicias un proyecto tienes que estar añadiendo y borrando cosas porque no las necesitas.

Bueno, que me enrollo como una persiana. Consigue esos libros de la forma que sea y empieza con el de Node. Yo me lo leí dos veces, me gustó.

2
MTX_Anubis

#7 Cuantas peticiones/segundo necesitas para que sea necesario que sea rápido, muy rápido? Me da a mí que cualquier cosa te vale xD

2 respuestas
Foxandxss

#13 Además de verdad, lo de que node es más rápido no es cierto (al menos no del todo), pero no quería quitarle ilusiones a #1.

1 respuesta
bornex

#13 #14 Es un proyecto para la universidad, para la copistería de la UMA. Peticiones concurrentes no se cuantas podrá tener, pero supongamos que tenemos un servidor de 8GB de memoria, con 4000 peticiones concurrentes te la fundes. (Hablando de PHP y Java)

La alta escalabilidad de node nos ha hecho decantarnos por él. Se muy poco de node, pero ¿no es cierto que consume menos recursos? No es un Tomcat o un Glassfish.

A demás, no me quitéis la ilusión que quiero aprender node :qq:

3 respuestas
Foxandxss

#15 Ah, es un proyecto chulo. Tu hazlo, no hay nada mejor que ver las cosas haciéndolo y no con lo que te diga nadie.

Independientemente de tu proyecto, node tiene muy mucho futuro y te vendrá super bien.

Entonces... un proyecto para copicentro? Pero lo usarán o es solo prueba de concepto?

EDITO: Al decir biblioteca... como sea la de la facu de informatica... Yo alli no he visto nada interesante...

A los alumnos no os dan acceso a Safari books?

2 respuestas
bornex

#16 Pues se supone que lo usarán, es una feria, como un hackatón o algo de eso, creo... xD a ver que nos encontramos allí. La web es esta http://www.ideasfactory.es/

Si si, tenemos acceso a safari books, me referia a ello. En la biblio de la UMA no está... Así que lo obtendré de ahí.

1 respuesta
Foxandxss

#17 Vale, eso tiene más sentido. Ahí está todo.

Yo sé que mi novia tiene porque curra en la UMA, pero no sabía si los alumnos lo tenían.

MTX_Anubis

#15 Hombre menos recursos que un tomcat seguro xD. Tomcat no me gusta nada y prefiero tener embebido mi servidor web en la app

Como te dice #16 adelante, hazlo y prueba y aprende, yo en cada proyecto tiro por cosas distintas si sé que se voy a poder hacerlo por el placer de probar cosas nuevas. Node no lo he tocado porque JS no me gusta nada y tampoco ha llegado a encajar en ninguno de los proyectos que he hecho (bueno podría haberlo hecho pero he preferido usar soluciones más robustas y más testeadas).

4K req/sec no son tantas peticiones (y dudo que las vayais a alcanzar) pero más vale prevenir que curar! Así que suerte y ve comentando como va la cosa ;)

2 respuestas
Foxandxss

#19 La app aguanta esas 4k req/sec, pero la fotocopiadora no lo creo, jaja.

1 respuesta
bornex

#19 Claro, vamos a usar este tipo de tecnología porque podemos, y así aprendemos a usarla, ya que en la facultad no nos enseñan nada de JS. Y la verdad que a mi si me gusta JS, no me disgusta para nada.

#20 Ese es el quid de la cuestión, node es el intermediario, se encarga de encolar las peticiones y distribuirlas a las fotocopiadoras.

Os iré informando de como va la cosa, aunque ya os digo que ni siquiera sabemos si nos van a coger la idea (aunque la hagamos gratis). Aun así, aprenderé node para mí, tengo otros proyectos en mente.

2 respuestas
Foxandxss

#21 que te guste Javascript te abre 20 puertas, porque conozco a muchos pobres desgraciados que hacen javascript por obligación y no les gusta y sufren.

1 respuesta
bornex

#22 Jajajaja, me encanta la programación y aún más si cabe hacerme mis propios códigos. Entonces, tengo un plus! :D

MTX_Anubis

#21 Por si te apetece mirarlo, lo normal es usar un sistema de colas como Rabbitmq, Kafka, activemq y cosas así.

En tu caso tienes un problema añadido que son los archivos adjuntos a imprimir aunque los podrías meter en el propio mensaje, todo eso queda en memoria y lo suyo es guardarlos en disco, encolar un mensaje con el path al archivo para cuando esté listo mandarlos a la impresora.

luego tus consumidores de estas colas cuando esté disponible la impresora: recoge mensaje, y envía el archivo a la impresora, cuando esté finalizado borra el archivo.

Podrías implementar tu el sistema de colas por supuesto pero hacerlo bien es algo complejo como persistencia de mensajes, comprobacion de fallos, qué ocurre si se cae el sistema, etc. Para hacer un sistema robusto hay mucho más de lo que parece a primera vista xD

Y además son sistemas ya hechos, faciles de usar y funcionan genial

Te lo digo porque si quieres mirarlo, yo ahora mismo estoy empezando un proyecto que entre otras cosas, sirve para auditar todo lo que hacen unas 15000 maquinas y el flujo de mensajes es constante (se están usando y tienen que enviar lo que hacen a un servidor central xD). A falta de más pruebas con otras cosas la idea inicial es usar finagle + kafka para las auditorias que encaja bastante bien xD

eXtreM3

#8 vaya jefazo, se nota que pilotas x100000000. Mis dieses ^^

B

Como te comentan anteriormente mejor que te leas algún libro de como funciona node para que luego no te pierdas en el infierno de las piramides de callbacks.

1 respuesta
DarkSoldier

#26 no hay libro que te salve de eso xD

1 1 respuesta
Foxandxss

#27 Eso es discutible DarkSoldier. Bueno, tienes razón. Libros no te van a ayudar con ello, pero otros frameworks sí.

Voy a poner un poco de pseudocodigo (seguro que alguna errata tendré, pero es la idea). Queremos pillar el usuario, si existe, buscamos sus facturas, si no existe enviamos un error de que no encontramos el usuario. Usaremos la misma interfaz (o parecida de mongoose).

Express (imaginad que es la función de una ruta):

Primero buscas el usuario, si da error lo lanzas, si no existe, lanzas, si existe buscas las facturas, si da error lo lanzas, si no existes, lanzas y si existen lo devuelves como json.

En Koa, un framework muy moderno, pero bastante más complicado para empezar (por eso nunca lo recomendé):

Usa generadores de ES6 a forma de "hack" para conseguir este resultado tan majete.

Con Koa no hay infiernos de callbacks.

De hecho, con todas las librerías haciendo ya promesas, el ejemplo de express se puede hacer con menos "callback hell":

De heecho, el primer ejemplo se puede dejar con menos anidamiento.

EDITO: Me doy cuenta que busco un usuario para tener su ID ya teniendo su ID. Bueno, la idea es lo que cuenta, el ejemplo es bastante malo.

1
Kiroushi

#15 ¿4000 peticiones concurrentes en una copistería?

Parece que estuvieras buscando excusas para usar Node.js. Di que quieres usarlo y punto. No busques escudo en el rendimiento, porque una aplicación en L5 con una buena estructura y cacheo inteligente te aguanta lo que le quieras echar.

¿Que quieres hacerlo en Node.js? Adelante. Es una gran tecnología. Pero decir que "Java o PHP no aguantarían lo mismo" es como decir que quieres ir a todos lados en helicóptero porque es más "moderno" o más "cool" que ir en coche.

1 respuesta
B

#29 Con node.js pasa algo parecido que con nosql vs relacional, mucha gente lo adopta porque está de moda y no evalúa si es realmente lo que anda buscando, pero en este caso creo que como ya dijo quiere aprender node básicamente.

En mi caso necesitaba un sistema no bloqueante con soporte de websockets por lo que mis alternativas eran node.js o golang, al tener más comunidad node.js y tener el pedazo de framework angular.js como frontend pues me quedó claro.

1 1 respuesta