Node js Guia Principiantes PDF

Title Node js Guia Principiantes
Course Estudio de trabajo
Institution Instituto Tecnológico de Querétaro
Pages 40
File Size 752.9 KB
File Type PDF
Total Downloads 25
Total Views 151

Summary

Gkhmvgj hkbggnn kkkhff kkgfrg hjllht jjrjfu hjwkducudj kekelsj keiicuwj iwkslfjwh jwksljydjveivtskek uwkflslu jdjguwj jwkvy y Du uwj...


Description

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

ElLibroparaPrincipiantes enNode.js

UntutorialdeNode.jspor:ManuelKiessling&HermanA.Junge

SobreelTutorial El objetivo de este documento es ayudarte a empezar con el desarrollo de aplicaciones para Node.js, enseñándote todo lo que necesites saber acerca de JavaScript"avanzado"sobrelamarcha.Estetutorialvamuchomásalládeltípico manual"HolaMundo".

Status Estásleyendolaversiónfinaldeestelibro,esdecir,lasactualizacionessoloserán hechas para corregir errores o para reflejar cambiar en nuevas versiones de Node.js. Lasmuestrasdecódigodeestelibroestánprobadasparafuncionarconlaversión 0.6.11deNode.js.

AudienciaObjetivo Estedocumentoprobablementeserámejorentendidoporloslectoresquetengan un trasfondo similar al mío: Programadores experimentados en al menos un lenguaje orientadoal objeto,como Ruby, Python, PHP o Java; poca experiencia conJavaScript,yningunaexperienciaenNode.js. Elqueestedocumentoestéorientadoadesarrolladoresqueyatienenexperiencia con otros lenguajes de programación significa que no vamos a cubrir temas realmente básicos como tipos de datos, variables, estructuras de control y similares.Debessaberacercadeestostópicosparaentenderestedocumento. Sinembargo,dadoquelasfuncionesyobjetosenJavaScriptsondiferentesdesus contrapartes en la mayoría de los lenguajes, estos serán explicados con más detalle. http://www.nodebeginner.org/indexes.html

1/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

Estructuradeestedocumento AlTérminodeestedocumento,habráscreadounaaplicaciónWebcompleta,que permitaalosusuariosdeéstaelverpáginaswebysubirarchivos. La cual, por supuesto, no va ser nada como la "aplicación que va a cambiar el mundo", no obstante eso, nosotros haremos la milla extra y no vamos sólo a codificarunaaplicaciónlo"suficientementesimple"parahacerestoscasosdeuso posible,sinoquecrearemosunframeworksencillo,perocompleto,afindepoder separarlosdistintosaspectosdenuestraaplicación.Verásloqueestosignificaen pocotiempo. EmpezaremospormirarcómoeldesarrolloenJavaScriptenNode.jsesdiferente deldesarrolloenJavaScriptenunbrowser. Luego,nosmantendremosconlaviejatradicióndeescribirunaaplicación"Hola Mundo",lacualeslaaplicaciónmásbásicadeNode.jsque"hace"algo. Enseguida, discutiremos que tipo de "aplicación del mundo real" queremos construir, disectaremos las diferentes partes que necesitan ser implementadas paraensamblarestaaplicación,yempezaremostrabajandoencadauna deestas partespasoapaso. Talycualloprometido,aprenderemossobrelamarchaacercadealgunosdelos muchos conceptos avanzados de JavaScript, como hacer uso de ellos, y ver el porqué tiene sentido el hacer uso de estos conceptos en vez de los que ya conocemosporotroslenguajesdeprogramación.

TabladeContenidos

JavaScriptyNode.js JavaScriptyTú Antesquehablemosdetodalapartetécnica,tomémonosunminutoyhablemos acerca de tiy turelación con JavaScript. Este capítulo está aquí para permitirte estimarsitienesentidoelquesigasonoleyendoestedocumento. http://www.nodebeginner.org/indexes.html

2/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

Si eres como yo, empezaste con el "desarrollo" HTML hace bastante tiempo, escribiendo documentos HTML. Te encontraste en el camino con esta cosa simpática llamada JavaScript, pero solo la usabas en una forma muy básica, agregandointeractividadatuspáginasdecuandoencuando. Lo querealmente quisiste era"la cosareal", querías saber cómo construir sitios webcomplejosAprendisteunlenguajedeprogramacióncomoPHP,Ruby,Java, yempezasteaescribircódigo"backend". No obstante, mantuviste un ojo en JavaScript, y te diste cuenta que con la introducción de jQuery, Prototype y otros, las cosas se fueron poniendo más avanzadasenlasTierrasdeJavaScript,yqueestelenguajeerarealmentemásque hacerunwindow.open(). Sinembargo,estoeratodocosadel frontend,yaunqueeraagradablecontarcon jQuery a tu disposición en cualquier momento que te sintieras con ánimo de sazonarunapáginaweb,alfinaldeldía,loqueerasalomás, eraunusuariode JavaScript,perono,undesarrolladordeJavaScript. YentoncesllegóNode.js.JavaScriptenelservidor,¿Quéhayconeso? DecidistequeerayatiempoderevisarelnuevoJavaScript.Peroespera:Escribir aplicacionesNode.jsesuna cosa;Entenderel porqué ellasnecesitan ser escritas enlamaneraquelosonsignificaentenderJavaScript!Yestavezesenserio. Yaquíestáelproblema:YaqueJavaScriptrealmentevivedos,otalveztresvidas (ElpequeñoayudanteDHTMLdemediadosdelos90's,lascosasmásseriastales comojQueryysimilares, yahora, ellado delservidor), noes tanfácilencontrar informaciónqueteayudeaaprenderJavaScriptdela"maneracorrecta",deforma depoderescribiraplicacionesdeNode.jsenunaaparienciaquetehagasentirque nosóloestásusandoJavaScript,sinoquetambiénestándesarrollandoconél. Porqueahíestáelasunto:Yaeresundesarrollador experimentado,ynoquieres aprender una nueva técnica simplemente metiendo código aquí y allá mal aprovechándolo; Quieres estar seguro que te estás enfocando en un ángulo correcto. Hay,porsupuesto,excelentedocumentaciónafuera.Peroladocumentaciónporsí solanoessuficiente.Loquesenecesitaesunaguía. http://www.nodebeginner.org/indexes.html

3/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

Miobjetivoesproveerteestaguía.

UnaAdvertencia HayalgunaspersonasrealmenteexcelenteenJavaScript.Nosoyunadeellas. Yosoyrealmenteeltipodelquetehehabladoenlospárrafosprevios.Séunpar de cosas acerca de desarrollar aplicaciones backend, pero aún soy nuevo al JavaScript "real" y aún más nuevo a Node.js. He aprendido solo recientemente algunodelosaspectosavanzadosdeJavaScript.Nosoyexperimentado. Porloqueestenoesunlibro"desdenoviciohastaexperto".Esteesmásbienun libro"desdenovicioanovicioavanzado". Si no fallo, entonces este será el tipo de documento que deseo hubiese tenido cuandoempecéconNode.js.

JavaScriptdelLadodelServidor LasprimerasencarnacionesdeJavaScriptvivíanenlosbrowsers.Peroestoessólo elcontexto.Defineloquepuedeshacerconellenguaje,peronodicemuchoacerca deloqueellenguaje mismopuede hacer. JavaScriptes un lenguaje"completo": Lo puedes usar en muchos contextos y alcanzar con éste, todo lo que puedes alcanzarconcualquierotrolenguaje"completo". Node.jsrealmenteessólootrocontexto:tepermitecorrercódigoJavaScriptenel backend,fueradelbrowser. Para ejecutar el código JavaScript que tu pretendes correr en el backend, este necesita ser interpretado y, bueno, ejecutado, Esto es lo que Node.js realiza, haciendousodelaMaquinaVirtualV8deGoogle,elmismoentornodeejecución paraJavaScriptqueGoogleChromeutiliza. Además,Node.jsvieneconmuchosmódulosútiles,demaneraquenotienesque escribirtododecero,comoporejemplo,algoquepongaunstringalaconsola. Entonces,Node.jsesenrealidaddoscosas:unentornodeejecuciónyunalibrería.

http://www.nodebeginner.org/indexes.html

4/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

Para hacer uso de éstas (la librería y el entorno), necesitas instalar Node.js. En lugar de repetir el proceso aquí, te ruego visitar las instrucciones oficiales de instalación.PorfavorvuelveunavezquetengastuversióndeNode.jscorriendo.

"HolaMundo" Ok. Saltemos entonces al agua fría y escribamos nuestra primera aplicación Node.js:"HolaMundo". Abre tu editor favorito y crea un archivo llamado holamundo.js. Nosotros queremosescribir"HolaMundo"aSTDOUT,yaquíestáelcódigonecesariopara haceresto:

console.log("HolaMundo");

Grabaelarchivo,yejecútaloatravésdeNode.js:

nodeholamundo.js

EstedeberíaretornarHolaMundoentumonitor. Ok,estoesaburrido,deacuerdo?Asíqueescribamosalgunacosareal.

UnaAplicaciónWebCompletaconNode.js LoscasosdeUso Mantengámoslosimple,perorealista: ElUsuariodeberíasercapazdeocuparnuestraaplicaciónconunbrowser. ElUsuariodeberíaverunapáginadebienvenidacuandosolicita http://dominio/inicio,lacualdespliegaunformulariodesúbida. Eligiendounarchivodeimagenparasubiryenviandoelformulario,la imagendeberíasersubidaahttp://dominio/subir,dondeesdesplegadauna http://www.nodebeginner.org/indexes.html

5/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

vezquelasúbidaestefinalizada.

Muy bien. Ahora, tu puedes ser capaz de alcanzar este objetivo googleando y programandoloquesea,peroesonoesloquequeremoshaceraquí. Másqueeso,noqueremosescribirsimplementeelcódigomásbásicoposiblepara alcanzaresteobjetivo,noimportaloeleganteycorrectoquepuedaserestecódigo. Nosotros agregaremos intencionalmente más abstracción de la necesaria de maneradepodertenerunaideadeloqueesconstruiraplicacionesmáscomplejas deNode.js.

LaPiladeAplicaciones Hagamos un desglose a nuestra aplicación. ¿Qué partes necesitan ser implementadasparapodersatisfacernuestroscasosdeuso? Queremosservirpáginasweb,demaneraquenecesitamosunServidor HTTP. Nuestroservidornecesitaráresponderdirectamentepeticiones(requests), dependiendodequéURLseapedidaenesterequerimiento,esque necesitaremosalgúntipodeenrutador(router)demanerademapearlos peticionesaloshandlers(manejadores)deéstos. Parasatisfaceralospeticionesquellegaronalservidoryhansidoruteados usandoelenrutador,necesitaremosdehechohandlers(manejadores) depeticiones ElEnrutadorprobablementedeberíatratarcualquierinformaciónPOSTque llegueydárselaaloshandlersdepeticionesenunaformaconveniente,luego necesitaremosmanipulacióndedatadepetición NosotrosnosoloqueremosmanejarpeticionesdeURLs,sinoquetambién queremosdesplegarcontenidocuandoestasURLsseanpedidas,loque significaquenecesitamosalgúntipodelógicaenlasvistasaserutilizada porloshandlersdepeticiones,demaneradepoderenviarcontenidoal browserdelUsuario. Porúltimo,peronomenosimportante,elUsuarioserácapazdesubir imágenes,asíquenecesitaremosalgúntipodemanipulacióndesubidas quienseharácargodelosdetalles.

Pensemos un momento acerca de como construiríamos esta pila deaplicaciones con PHP. No es exactamente un secreto que la configuración típica sería un ApacheHTTPserverconmod_php5instalado. http://www.nodebeginner.org/indexes.html

6/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

Loque,asuvez,significaqueeltema"Necesitamossercapacesdeservirpáginas webyrecibirpeticionesHTTP"nisiquierasucededentrodePHPmismo. Bueno,conNode.js,lascosassonunpocodistintas.PorqueconNode.js,nosolo implementamos nuestra aplicación, nosotros también implementamos todo el servidorHTTPcompleto.Dehecho,nuestraaplicaciónwebysuservidorwebson básicamentelomismo. Esto puede sonar como mucho trabajo, pero veremos en un momento que con Node.js,noloes. Empecemosporelprincipioeimplementemoslaprimerapartedenuestrapila,el servidorHTTP..

ConstruyendolaPiladeAplicaciones UnServidorHTTPBásico CuandolleguéalpuntodondequeríaempezarconmiprimeraaplicaciónNode.js "real", me pregunté no solo como la iba a programar, sino que también, como organizarmicódigo. ¿Necesitaré tenerlo todo en un archivo? Muchos tutoriales en la Web que te enseñancómoescribirunservidorHTTPbásicoenNode.jstienentodalalógica enunsololugar.¿Quépasasiyoquieroasegurarmequemicódigosemantenga leíbleamedidaquelevayaagregandomáscosas? Resulta,queesrelativamentefácildemantenerlosdistintosaspectosdetucódigo separados,poniéndolosenmódulos. Esto te permite tener un archivo main limpio, en el cual ejecutas Node.js, y módulos limpios que pueden ser utilizados por el archivo main entre muchos otros. Así que vamos a crear un archivo main el cual usaremos para iniciar nuestra aplicación,y un archivode módulo dónderesidirá el código denuestro servidor HTTP.

http://www.nodebeginner.org/indexes.html

7/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

Miimpresiónesqueesmásomenosunestándarnombraratuarchivoprincipal como index.js.Tienesentidotambiénquepongamosnuestromódulodeservidor enunarchivollamadoserver.js. Empecemosconelmódulodelservidor.Creaelarchivo server.jseneldirectorio raízdetuproyecto,yllénaloconelcódigosiguiente:

varhttp=require("http"); http.createServer(function(request,response){ response.writeHead(200,{"Content‐Type":"text/html"}); response.write("HolaMundo"); response.end(); }).listen(8888);

Eso es! Acabas de escribir un servidor HTTP activo. Probémoslo ejecutándoloy testeándolo.PrimeroejecutatuscriptconNode.js:

nodeserver.js

Ahora, abre tu browser y apúntalo a http://localhost:8888/. Esto debería desplegarunapáginawebquediga"HolaMundo". Interesante, ¿no? ¿Qué tal si hablamos de que está pasando aquí y dejamos la pregunta de 'cómo organizar nuestro proyecto' para después? Prometo que volveremosaesto.

AnalizandonuestroservidorHTTP Bueno,entonces,analicemosqueestápasandoaquí. Laprimeralínearequire,requierealmódulohttpquevieneincluidoconNode.jsy lohaceaccesibleatravésdelavariablehttp. Luegollamamosaunadelasfuncionesqueelmódulohttpofrece: createServer. Esta función retorna un objeto, y este objeto tiene un método llamado listen (escucha), y toma un valor numérico que indica el número de puerto en que nuestroservidorHTTPvaaescuchar. http://www.nodebeginner.org/indexes.html

8/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

Porfavorignoraporunsegundoaladefinicióndefunciónquesiguealallavede aperturadehttp.createServer. Nosotrospodríamoshaberescritoelcódigoqueiniciaanuestroservidorylohace escucharalpuerto8888delasiguientemanera:

varhttp=require("http"); varserver=http.createServer(); server.listen(8888);

Esto hubiese iniciado al servidor HTTP en el puerto 8888 y no hubiese hecho nadamás(nisiquierarespondidoalgunapeticiónentrante). La parte realmente interesante (y rara, si tu trasfondo es en un lenguaje más conservador, como PHP) es que la definición de función está ahí mismo donde unoesperaríaelprimerparámetrodelallamadaacreateServer(). Resulta que, este definición de función ES el primer (y único)parámetro que le vamos a dar a la llamada a createServer(). Ya que en JavaScript, las funciones puedenserpasadasdeunladoaotrocomocualquierotrovalor.

PasandoFuncionesdeunLadoaOtro Puedes,porejemplo,haceralgocomoesto:

functiondecir(palabra){ console.log(palabra); } functionejecutar(algunaFuncion,valor){ algunaFuncion(valor); } ejecutar(decir,"Hola");

Leeestocuidadosamente!Loqueestamoshaciendoaquíes,nosotrospasamosla función decir() comoel primer parámetro dela función ejecutar.No el valorde retornodedecir,sinoquedecir()misma!

http://www.nodebeginner.org/indexes.html

9/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

Entonces, decir se convierte en la variable local algunaFuncion dentro de ejecutar, y ejecutar puede llamar a la función en esta variable usando algunaFuncion()(agregandollaves). Por supuesto, dado que decir toma un parámetro, ejecutar puede pasar tal parámetrocuandollamaaalgunaFuncion. Nosotrospodemos,talcomolohicimos,pasarunafunciónporsu nombre como parámetroaotrafunción.Peronoestamosobligadosatenerquedefinirlafunción primero y luego pasarla. Podemos también definir y pasar la función como un parámetroaotrafuncióntodoalmismotiempo:

functionejecutar(algunaFuncion,valor){ algunaFuncion(valor); } ejecutar(function(palabra){console.log(palabra)},"Hola");

(N.delT.:functionesunapalabraclavedeJavaScript). Nosotrosdefinimoslafunciónquequeremospasaraejecutarjustoahíenellugar dondeejecutaresperasuprimerparámetro. De esta manera, no necesitamos darle a la función un nombre, por lo que esta funciónesllamadafunciónanónima. EstaesunaprimeraojeadaaloquemegustallamarJavaScript"avanzado".Pero tomémoslo paso a paso. Por ahora, aceptemos que en JavaScript, nosotros podemospasarunafuncióncomounparámetrocuandollamamosaotrafunción. Podemos hacer esto asignando nuestra función a una variable, la cual luego pasamos,odefiniendolafunciónapasarenelmismolugar.

DeQuémaneraelpasarfuncioneshaceque nuestroservidorHTTPfuncione Conesteconocimiento,VolvamosanuestroservidorHTTPminimalista:

varhttp=require("http"); http://www.nodebeginner.org/indexes.html

10/40

29/1/2015

ElLibroparaPrincipiantesenNode.js»Untutorialcompletodenode.js

http.createServer(function(request,response){ response.writeHead(200,{"Content‐Type":"text/html"}); response.write("HolaMundo"); response.end(); }).listen(8888);

A estas alturas, debería quedar claro lo que estamos haciendo acá: Estamos pasándolealafuncióncreateServerunafunciónanónima. Podemosllegaralomismorefactorizandonuestrocódigoasí:

varhttp=require("http"); functiononRequest(request,response){ response.writeHead(200,{"Content‐Type":"text/html"}); response.write("HolaMundo"); response.end(); } http.createServer(onRequest).listen(8888);

Quizás ahora es un buen momento para preguntar: ¿Por Qué estamos haciendo estodeestamanera?

CallbacksManejadasporEventos La respuesta a) No es algo fácil de explicar (al menos para mí), y b) Yace enla naturaleza misma de como Node.js trabaja: Está orientado al evento, esa es la razóndeporquéestanrápido. Podrías tomarte un tiempo para leer este excelente post (en inglés) de Felix Geisendördfer:Understandingnode.jsparaalgunaexplicacióndetrasfondo. AlfinaltodosereducealhechoqueNode.jstrabajaorientadoalevento.Ah,ysí, yo tampoco sé exacta...


Similar Free PDFs