Anda di halaman 1dari 11

14/03/13

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

Node.js Hispano

Node.js JavaScript en el Servidor Comunidad en Espaol HOME API en Espaol Node.js Contacto

Guia express & mongoose para Node.js Parte II #nodejs


En la Parte I de este tutorial llegamos a manejar datos de nuestro repositorio local. Sin embargo, estos datos son dummy. Liberemos el poder de la base de datos M o n g o D B , recordemos que introdujimos este documento: >d b . p r o d u c t o s . f i n d O n e ( ) { " _ i d ":O b j e c t I d ( " 4 f e 6 4 5 4 a 8 c 1 3 6 c f 4 9 7 2 1 3 5 9 f " ) , " n o m b r e ":" P a p a sF r i t a s " , " d e s c r i p c i o n ":" C r u j i e n t e s ,s a b o rm e d i t e r r a n e o " , " p r e c i o ":2 . 5 } Cmo conectamos nuestra base de datos MongoDB usando node.js? Usando la librera mongoose . El momento de la base de datos lleg, recordemos que al principio creamos el archivo m o d e l s / p r o d u c t o . j s : models/producto.js v a rS c h e m a=r e q u i r e ( ' m o n g o o s e ' ) . S c h e m a v a rp r o d u c t o _ s c h e m a=n e wS c h e m a ( { n o m b r e : S t r i n g , d e s c r i p c i o n : S t r i n g , p r e c i o : N u m b e r } ) v a rP r o d u c t o=m o d u l e . e x p o r t s=p r o d u c t o _ s c h e m a Y, Modifiquemos nuestros archivos de la siguiente manera: package.json { " n a m e " :" h e r m a n m o n g o o s e s u g g e s t i o n " ," v e r s i o n " :" 1 . 0 . 0 " ," d e p e n d e n c i e s " :{ " e x p r e s s " :" 2 . 5 . 8 " ," j a d e " :" 0 . 2 5 . x " ," m o n g o o s e " :" 2 . 5 . 1 0 " } } Una vez modificado p a c k a g e . j s o n , no olvidemos de actualizar nuestro modulos de node via n p mi n s t a l lfen el directorio de nuestra aplicacin. controllers/producto.js / /C r e a c i nd el aC o n e x i n v a rm o n g o o s e =r e q u i r e ( ' m o n g o o s e ' ) ,d b _ l n k =' m o n g o d b : / / l o c a l h o s t / s u p e r m e r c a d o ' ,d b =m o n g o o s e . c r e a t e C o n n e c t i o n ( d b _ l n k ) / /C r e a c i nd ev a r i a b l e sp a r ac a r g a re lm o d e l o v a rp r o d u c t o _ s c h e m a=r e q u i r e ( ' . . / m o d e l s / p r o d u c t o ' ) ,P r o d u c t o=d b . m o d e l ( ' P r o d u c t o ' ,p r o d u c t o _ s c h e m a ) Ahora, existe, por supuesto la posibilidad de montar de una manera general la conexin para toda la aplicacin. No la tocaremos sin embargo en este tutorial. Modificamos la funcin e x p o r t s . i n d e x , siempre dentro de c o n t r o l l e r s / p r o d u c t o . j s para que recoja los productos: controllers/producto.js e x p o r t s . i n d e x=f u n c t i o n( r e q ,r e s ,n e x t ){ P r o d u c t o . f i n d ( g o t P r o d u c t s ) / /N O T A :C r e oq u ee sb u e n ou s a rv e r b o se ni n g l sp a r al a sf u n c i o n e s , / / p o rl oc m o d oq u es o ne ne s t o sc a s o s( g e t ,g o t ;f i n d ,f o u n d ) f u n c t i o ng o t P r o d u c t s( e r r ,p r o d u c t o s ){ i f( e r r ){ c o n s o l e . l o g ( e r r ) r e t u r nn e x t ( ) } r e t u r nr e s . r e n d e r ( ' i n d e x ' ,{ t i t l e :' L i s t ad eP r o d u c t o s ' ,p r o d u c t o s :p r o d u c t o s } ) } } Ntese la estructura de callbacks: Cuando se pide la lista de productos, slo al llegar la respuesta invocamos a g o t P r o d u c t s , el cual llama a la renderizacin a travs de r e s . r e n d e rde la pgina. Para los que vienen de otros lenguajes esta manera de modelar puede ser confusa al principio. Pero tiene sus ventajas en el escenario web, el cual, a mi parecer es completamente orientado al evento.

www.nodehispano.com

1/11

14/03/13

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

Tenemos listo el back-end! Ya tenemos una lista de productos, ejecutamos? An no, ya que r e s . r e n d e r cargara el template jade, pero no le est insertando los datos. Por lo que modificaremos v i e w s / i n d e x . j a d epara tal efecto: views/index.jade h 2T a b l ad eP r o d u c t o s t a b l e ( b o r d e r = ' 1 ' ) t r t hP r o d u c t o t hD e s c r i p c i n t hP r e c i o -i f( p r o d u c t o s ) -e a c hp r o d u c t oi np r o d u c t o s t r t d a ( h r e f = " / p r o d u c t o / "+p r o d u c t o . _ i d . t o S t r i n g ( ) )# { p r o d u c t o . n o m b r e } t d# { p r o d u c t o . d e s c r i p c i o n } t d# { p r o d u c t o . p r e c i o } Bien. C T R L + C , $n o d ea p p . j s y veamos el resultado:

Pgina de Edicin de un Producto (GET /producto/:id) Si clickamos en el link del primer producto obtenidos, tendremos un mensaje que no podemos ver el producto. Tomaremos las medidas para ello. En general, se pueden dar buenos argumentos para no usar la misma id de producto de la base de datos como indicador i d para la ruta. Pero recordemos que estamos en un ejemplo didctico. Necesitaremos desarrollar (Y aqu veremos lo atractivo que es el paradigma MVC), una funcin de controlador y una vista, no necesitaremos en este ejemplo hacer funciones de modelos, dado que mongoose nos entrega todo. En la medida que veamos ms complejidad, es necesario encapsular las funciones de mongoose y las lgicas que necesitemos en funciones de modelo. controllers/producto.js

www.nodehispano.com

e x p o r t s . s h o w _ e d i t=f u n c t i o n( r e q ,r e s ,n e x t ){

2/11

14/03/13

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

e x p o r t s . s h o w _ e d i t=f u n c t i o n( r e q ,r e s ,n e x t ){ / /O b t e n c i nd e lp a r m e t r oi dd e s d el au r l v a ri d=r e q . p a r a m s . i d P r o d u c t o . f i n d B y I d ( i d ,g o t P r o d u c t ) f u n c t i o ng o t P r o d u c t( e r r ,p r o d u c t o ){ i f( e r r ){ c o n s o l e . l o g ( e r r ) r e t u r nn e x t ( e r r ) } r e t u r nr e s . r e n d e r ( ' s h o w _ e d i t ' ,{ t i t l e :' V e rP r o d u c t o ' ,p r o d u c t o :p r o d u c t o } ) } } Mongoose nos ahorra muchos problemas de desarrollo, tiene la funcin f i n d B y I d , (Ver documento), la que, dado un i den string, devuelve el objecto correspondiente (o null, si no existe) Necesitamos renderizar el objecto. Ac usaremos la misma plantilla para edicin y mostrar el producto: /views/show_edit.jade h 2# { t i t l e } f o r m ( m e t h o d = ' p o s t ' ) p l a b e l ( f o r = " n o m b r e " )N o m b r e : i n p u t ( t y p e = ' t e x t ' ,n a m e = ' n o m b r e ' ,v a l u e = p r o d u c t o . n o m b r e ) p l a b e l ( f o r = " d e s c r i p c i o n " )D e s c r i p c i n : i n p u t ( t y p e = ' t e x t ' ,n a m e = ' d e s c r i p c i o n ' ,s i z e = 1 0 0 ,v a l u e = p r o d u c t o . d e s c r i p c i o n ) p l a b e l ( f o r = " p r e c i o " )P r e c i o : i n p u t ( t y p e = ' t e x t ' ,n a m e = ' p r e c i o ' ,v a l u e = p r o d u c t o . p r e c i o ) p i n p u t ( t y p e = ' s u b m i t ' ,v a l u e = ' G u a r d a r ' ) Obtenemos la siguiente pantalla:

Sin embargo si presionamos el botn guardar cambios, nada ocurre. Es lo que habilitaremos en el siguiente apartado Enviar los cambios de un producto (POST producto/:id)

www.nodehispano.com

3/11

14/03/13
/controllers/producto.js

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

Este es un trabajo completo slo en el controlador (ya que tenemos la vista y modelo en mongoose):

e x p o r t s . u p d a t e=f u n c t i o n( r e q ,r e s ,n e x t ){ v a ri d=r e q . p a r a m s . i d v a rn o m b r e =r e q . b o d y . n o m b r e | |' ' v a rd e s c r i p c i o n=r e q . b o d y . d e s c r i p c i o n | |' ' v a rp r e c i o =r e q . b o d y . p r e c i o | |' ' / /V a l i d e m o sq u en o m b r eod e s c r i p c i o nn ov e n g a nv a c o s i f( ( n o m b r e = = =' ' )| |( d e s c r i p c i o n= = =' ' ) ){ c o n s o l e . l o g ( ' E R R O R :C a m p o sv a c i o s ' ) r e t u r nr e s . s e n d ( ' H a yc a m p o sv a c o s ,r e v i s a r ' ) } / /V a l i d e m o sq u ee lp r e c i os e an m e r o i f( i s N a N ( p r e c i o ) ){ c o n s o l e . l o g ( ' E R R O R :P r e c i on oe sn m e r o ' ) r e t u r nr e s . s e n d ( ' P r e c i on oe su nn m e r o! ! ! ! ! ' ) } P r o d u c t o . f i n d B y I d ( i d ,g o t P r o d u c t ) f u n c t i o ng o t P r o d u c t( e r r ,p r o d u c t o ){ i f( e r r ){ c o n s o l e . l o g ( e r r ) r e t u r nn e x t ( e r r ) } i f( ! p r o d u c t o ){ c o n s o l e . l o g ( ' E R R O R :I Dn oe x i s t e ' ) r e t u r nr e s . s e n d ( ' I DI n v l i d a ! ' ) }e l s e{ p r o d u c t o . n o m b r e =n o m b r e p r o d u c t o . d e s c r i p c i o n =d e s c r i p c i o n p r o d u c t o . p r e c i o =p r e c i o p r o d u c t o . s a v e ( o n S a v e d ) } } f u n c t i o no n S a v e d( e r r ){ i f( e r r ){ c o n s o l e . l o g ( e r r ) r e t u r nn e x t ( e r r ) } r e t u r nr e s . r e d i r e c t ( ' / p r o d u c t o / '+i d ) } } Controlamos los errores de no ID y parmetros en blanco. A n e x t ( ) le estamos dando un parmetros. En iteraciones posteriores debemos configurar que si n e x t recibe parmetros, entregarle un error 500 al usuario. Pasaremos de esta funcionalidad por ahora. Borrar un Producto (POST /delete-producto/:id) Cmo se mencion arriba, se podra haber usado el verbo DELETE (haciendo override de mtodo). Para hacer ms simple el tutorial, se implementa en G E T . Debemos agregar los links para el eliminado en la lista de productos, es decir en el template de jade: views/index.jade h 2T a b l ad eP r o d u c t o s t a b l e ( b o r d e r = ' 1 ' ) t r t hP r o d u c t o t hD e s c r i p c i n t hP r e c i o t h& n b s p ; -i f( p r o d u c t o s ) -e a c hp r o d u c t oi np r o d u c t o s t r t d a ( h r e f = " / p r o d u c t o / "+p r o d u c t o . _ i d . t o S t r i n g ( ) )# { p r o d u c t o . n o m b r e } t d# { p r o d u c t o . d e s c r i p c i o n } t d# { p r o d u c t o . p r e c i o } t d a ( h r e f = " / d e l e t e p r o d u c t o / "+p r o d u c t o . _ i d . t o S t r i n g ( ) )B o r r a r

www.nodehispano.com

4/11

14/03/13

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

Y la funcionalidad correspondiente en el controlador: /controllers/producto.js e x p o r t s . r e m o v e=f u n c t i o n( r e q ,r e s ,n e x t ){ v a ri d=r e q . p a r a m s . i d P r o d u c t o . f i n d B y I d ( i d ,g o t P r o d u c t ) f u n c t i o ng o t P r o d u c t( e r r ,p r o d u c t o ){ i f( e r r ){ c o n s o l e . l o g ( e r r ) r e t u r nn e x t ( e r r ) } i f( ! p r o d u c t o ){ r e t u r nr e s . s e n d ( ' I n v a l i dI D .( D ea l g no t r ol a d ol as a c a s t et . . . ) ' ) } / /T e n e m o se lp r o d u c t o ,e l i m i n e m o s l o p r o d u c t o . r e m o v e ( o n R e m o v e d ) } f u n c t i o no n R e m o v e d( e r r ){ i f( e r r ){ c o n s o l e . l o g ( e r r ) r e t u r nn e x t ( e r r ) } r e t u r nr e s . r e d i r e c t ( ' / ' ) } } Ntese (con algo de humor por supuesto), como reaccionamos ante una id que no encontramos. Si bien asumimos que esta funcin es llamada dentro de la pgina de ndice, es posible que los valores quieran ser ingresados directamente (ala REST). El desarrollador debe preveer esta conducta y crear los flujos adecuados. Cosas que podemos agregar: Hacer una funcin js de cliente para que despliegue un confirmador (est seguro?) y enviar va AJAX la llamada a borrar el producto; Podemos cerciorarnos adems que quien de la orden est dentro de una sesin; Podemos agregar un token contra Cross Site Request Forgery, entre otros. Agregar un Producto (GET /nuevo-producto) Finalmente, la funcionalidad de agregar productos. La primera idea es que la funcin asociada a la ruta, e x p o r t s . c r e a t e , nos arroje un html con los campos en blanco:

www.nodehispano.com

5/11

14/03/13
/controllers/producto.js

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

e x p o r t s . c r e a t e=f u n c t i o n( r e q ,r e s ,n e x t ){ r e t u r nr e s . r e n d e r ( ' s h o w _ e d i t ' ,{ t i t l e :' V e rP r o d u c t o ' ,p r o d u c t o :{ } } ) } Eso fue sencillo. Quisieramos agregar un link a esta misma pgina en la pgina de inicio:

/views/index.jade p a ( h r e f = ' / n u e v o p r o d u c t o ' )N u e v oP r o d u c t o

www.nodehispano.com

6/11

14/03/13

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

Y la funcin de controlador e x p o r t s . c r e a t edebe ser modificada, crearemos un desvo segn el metodo HTTP que ocupemos (GET o POST) e x p o r t s . c r e a t e=f u n c t i o n( r e q ,r e s ,n e x t ){ i f( r e q . m e t h o d= = =' G E T ' ){ r e t u r nr e s . r e n d e r ( ' s h o w _ e d i t ' ,{ t i t l e :' N u e v oP r o d u c t o ' ,p r o d u c t o :{ } } ) }e l s ei f( r e q . m e t h o d= = =' P O S T ' ){ / /O b t e n e m o sl a sv a r i a b l e syl a sv a l i d a m o s v a rn o m b r e =r e q . b o d y . n o m b r e | |' ' v a rd e s c r i p c i o n=r e q . b o d y . d e s c r i p c i o n | |' ' v a rp r e c i o =r e q . b o d y . p r e c i o | |' ' / /V a l i d e m o sq u en o m b r eod e s c r i p c i o nn ov e n g a nv a c o s i f( ( n o m b r e = = =' ' )| |( d e s c r i p c i o n= = =' ' ) ){ c o n s o l e . l o g ( ' E R R O R :C a m p o sv a c i o s ' ) r e t u r nr e s . s e n d ( ' H a yc a m p o sv a c o s ,r e v i s a r ' ) } / /V a l i d e m o sq u ee lp r e c i os e an m e r o i f( i s N a N ( p r e c i o ) ){ c o n s o l e . l o g ( ' E R R O R :P r e c i on oe sn m e r o ' ) r e t u r nr e s . s e n d ( ' P r e c i on oe su nn m e r o! ! ! ! ! ' ) } / /C r e a m o se ld o c u m e n t oyl og u a r d a m o s v a rp r o d u c t o=n e wP r o d u c t o ( { n o m b r e :n o m b r e ,d e s c r i p c i o n :d e s c r i p c i o n ,p r e c i o :p r e c i o } ) p r o d u c t o . s a v e ( o n S a v e d ) f u n c t i o no n S a v e d( e r r ){ i f( e r r ){ c o n s o l e . l o g ( e r r ) r e t u r nn e x t ( e r r ) } r e t u r nr e s . r e d i r e c t ( ' / ' ) } } } Podemos hacer algunas pruebas:

www.nodehispano.com

7/11

14/03/13

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

www.nodehispano.com

8/11

14/03/13

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

Y eso sera todo por este tutorial. Insisto, se pueden hacer muchas cosas ms, pero el objetivo es introducir al lector en estas tecnologas. Personalmente hubiese hecho algn trabajo para manejar los errores y devolver un error 500, desarrollo de usuarios y sesiones, ms javascript de cliente y otros. Para el futuro. Muchas gracias.

Todo el cdigo lo pueden encontrar en el repositorio: herman-mongoose-suggestion, Autor de ste Artculo


Herman Junge , Chileno. Aspirante a Programador Zen. Ingeniero en Geekli.st, donde hace malabarismo en el stack NodeJS, MongoDB y Redis, entre otras tecnologas, alternando features tanto de front, como de back -end. En sus ratos libres reune energas para entender como las maquinas pueden aprender y ayudarnos en la recopilacin y creacin de conocimiento. Twitter: @hermanjunge Geekli.st: http://geekli.st/hermanjunge
Me gusta 6 Tw eet 4 2

December 23, 2012 Categories Artculos Tags Express, javascript, moongose , Node , Node.js

Taller Node.js + Socket.IO con Nacho Soto #nodejs

www.nodehispano.com

9/11

14/03/13

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

Me gusta

Tw eet

11

November 16, 2012 Categories Artculos Tags Node.js, Socket.IO, Taller, Video

Oferta Laboral Node.js en Mediasmart

Mediasmart es una empresa joven que soluciona problemas complejos de publicidad mvil. Es una compaa pequea con grandes oportunidades de crecimiento. Empresa con gran respaldo y un gran lugar para trabajar con ventajas como el teletrabajo, con grandes profesionales y herramientas de vanguardia. Mediasmart busca candidatos para ampliar su departamento de tecnologa. Las responsabilidades sern trabajar en nuestros productos manteniendo y expandiendo sus funcionalidades, mejorando su usabilidad a travs de casos de prueba y, dependiendo de tus habilidades trabajar en nuestro SDK mvil o mejorar nuestra interfaz backbone.js Capacidades Mediasmart busca profesionales con experiencia en sistemas distribuidos basados en event model programming. Experiencia en Ruby EventMachine, Python Twisted/Tornado o Erlang. Lo ideal es contar con experiencia en Node.js. Si no tienes experiencia en ninguno de estos, como mnimo debers tener experiencia en start ups, y disposicin para programacin creativa con contribuciones a la escena del open source. Experiencia en JavaScript, de manera ideal Node.js. Coffescript es un extra Experiencia en Event Driven Programming Conocimiento en NoSQL. Conocimientos de administracin, Membase o Couchbase es un extra Conocimiento del protocolo y programacin en Memcached Experiencia en nginx para utilizacin y configuracin. Experiencia en programacia de mdulos en Lua para nginx es un extra Experiencia de desarrollo de software en Objective C para iOS es un extra Conocimiento practico de ambientes de desarrollo para Android. Contar con una aplicacin escrita para Android es un extra Experiencia de trabajo altamente efectivo en equipos geogrficamente dispersos Experiencia en el desarrollo de un Ad Server es un extra Experiencia en entrega de software comercial para mviles Otras Habilidades Excelentes habilidades de comunicacin tanto escritas como orales Habilidades para buena organizacin y habilidades para trabajo efectivo en equipos Fluidez en Ingles y Espaol Fluidez en el manejo de programas de oficina ( Word, Excel, etc ) y sistemas operativos modernos ( Mac OS X de preferencia ) Los candidatos por favor aplicar enviando enlaces de su cuenta GitHub o proyectos personales a el correo electrnico: info@mediasmart.es Descargar oferta laboral: Link
Me gusta 6
Tw eet 3 3

November 15, 2012 Categories Oferta Laboral Tags Node.js, Oferta Laboral

Cuando los desarrolladores .NET se deciden por Node.js

www.nodehispano.com

10/11

14/03/13

Node.js Hispano | Node.js JavaScript en el Servidor Comunidad en Espaol

En el sitio Performance Zone encontramos un artculo que nos llama la atencin y nos presenta una comparacin entre la implementacin de un servidor HTTP Asncrono desarrollado con tecnologa .NET y su equivalente desarrollado con tecnologa Node.js Veamos todas las herramientas necesarias aplicadas en cada implementacin para cada una de estas tecnologas. Este es un pequeo ejemplo .NET de un HttpHandler con manejo asincrnico y para su ejecucin se utiliz EasyNetQ. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 u s i n gS y s t e m ; u s i n gS y s t e m . T h r e a d i n g ; u s i n gS y s t e m . T h r e a d i n g . T a s k s ; u s i n gS y s t e m . W e b ; n a m e s p a c eT e s t H t t p H a n d l e r { p u b l i cc l a s sT i m e r H a n d l e r:I H t t p A s y n c H a n d l e r { p u b l i cv o i dP r o c e s s R e q u e s t ( H t t p C o n t e x tc o n t e x t ) { t h r o wn e wI n v a l i d O p e r a t i o n E x c e p t i o n ( " T h i sh a n d l e rc a n n o tb ec a l l e ds y n c h r o n o u s l y " ) ; } p u b l i cb o o lI s R e u s a b l e { g e t{r e t u r nf a l s e ;} } p u b l i cI A s y n c R e s u l tB e g i n P r o c e s s R e q u e s t ( H t t p C o n t e x tc o n t e x t ,A s y n c C a l l b a c kc a l l b a c k ,o b j e c ts t a t e ) { v a rt a s k C o m p l e t i o n S o u c e=n e wT a s k C o m p l e t i o n S o u r c e < b o o l > ( s t a t e ) ; v a rt a s k=t a s k C o m p l e t i o n S o u c e . T a s k ; v a rt i m e r=n e wT i m e r ( t i m e r S t a t e= > { c o n t e x t . R e s p o n s e . W r i t e ( " O K " ) ; c a l l b a c k ( t a s k ) ; t a s k C o m p l e t i o n S o u c e . S e t R e s u l t ( t r u e ) ; } ) ; t i m e r . C h a n g e ( 1 0 0 0 ,T i m e o u t . I n f i n i t e ) ; } r e t u r nt a s k ;
?

p u b l i cv o i dE n d P r o c e s s R e q u e s t ( I A s y n c R e s u l tr e s u l t ) { / /n o t h i n gt od o }

De lo que se puede ver nos lleva algn tiempo el poder desarrollar un servidor sin bloqueos lo cual es nativo en una servidor en Node.js 1 2 3 4 5 6 7 8 9 1 0 v a rh t t p=r e q u i r e ( ' h t t p ' ) ; h t t p . c r e a t e S e r v e r ( f u n c t i o n( r e q ,r e s ){ s e t T i m e o u t ( f u n c t i o n( ){ r e s . w r i t e H e a d ( 2 0 0 ,{' C o n t e n t T y p e ' :' t e x t / p l a i n '} ) ; r e s . e n d ( ' O K ' ) ; } ,1 0 0 0 ) ; } ) . l i s t e n ( 1 3 3 8 ) ; c o n s o l e . l o g ( ' L o n g R u n n i n g S e r v e ri sa th t t p : / / l o c a l h o s t : 1 3 3 8 / ' ) ;
?

Primero en Node.js la implementacin necesita menos cdigo y en tiempo de ejecucin no es necesario de herramientas de terceros para poder ejecutarlo.
Me gusta 12 Tw eet 16 11

October 16, 2012 Categories Artculos Tags .NET, Node , Servidor Older posts 2013 Node.js Hispano | Theme: Bugis by Elmastudio Top

www.nodehispano.com

11/11

Anda mungkin juga menyukai