Xuit phat ill cac 1y do tren, chung toi dff thlJc hi~n d~ tai "Tim hieu Node.js vaxay dlJng trang web dQc ngu6n tin" Trong d~ tai nay, chung toi tim hieu v~ nhung ki€n thlic cO'ban c~n b
Trang 1DO GIAO DUC vA BAo TAO .TRUONG BAI HOC NGOAI NGU - TIN HOC TP.HCM
KHOA CONG NGH~ THONG TIN
Giang vien htrOng din: ThS Nguy~n PhtrO'e B,iSinh vien th'1c hi~n:
Binh Kim Quac Khai - MSSV: 09DHII031Ngo Van Kim Khanh - MSSV: 09DHII025
TP HO cHi MINH - 2013
Trang 2L01 CAM ON
Lai cam on d~u tien, chung toi xin phep dugc gui dSn quy th~y co trong khoa
Cong Ngh~ Thong Tin, cling nhu cac th~y co cua truang B;;ti hQc Ngo;;ti
Ngu-Tin HQc da: truy~n d;;tt rftt nhi~u kiSn thuc va ky nang huu feh trong su6t qua
trinh hQc ~p, ren luy~n t;;titruang.
D?c bi~t, v6'i long kinh trQng va biSt on sau s~c, chung toi cling xin gui dSn
nguai th~y cua chung toi - Th~y Th~y Nguyen Phuac D;;ti lai cam on chan
thanh nh<1tvi da: hSt long t;;tOdi~u ki~n thu?n lai, d9ng vien chung toi hoanthanh t6t nh<1tnghien cuu nay sao cho khoa hQc va mang tinh ung ~\lng cao.Xin chan thanh cam on SlJ giup dO',d9ng vien va chi bao r<1tnhi~t tinh cua cacanh chj va t<1tca cac b;;tn, nhilng nguai da: giup chung toi c6 du nghj llJc va ychi de hoan thanh lu?n van nay
M?c du da: c6 g~ng hSt suc, song ch~c ch~n lu?n van khong kh6i nhung thiSus6t Chung toi rftt mong nh?n dugc SlJ thong cam va chi bao t?n tinh cua quyTh~y Co va cac b;;tn
Nh6m sinh vien thlJc hi~n
Dinh Kim Qu6c Khai va Ngo Van Kim Khanh
Trang 3Ly do chQn d~ tili
Cling v6i SlJ phat trien m~nh me clla cac website va ling d1)ng tren n~n tangweb, cac cong ngh~ m6i ngay cang phat trien de dap frng kip nhu c~u k€t n6iInternet ngay cang tang cao clla con nguo'i.
G~n day, Node.js tra thanh mQt trong nhung cong ngh~ thuOng xuyen duqcnh~c d€n va dang nh~n duqc nhi~u SlJ quan tam va h6 trq nhi~t tinh bai caccong ty 16n nhu Microsoft, RedHat, Amazon, Nam 2012, Node.js duqc t~pchi Info World binh chQn 1a cong ngh~ Clla nam Hi~n nay, tren cQng d6ngm~ng, Node.js lien t1)c duqc d6ng g6p, b6 sung va phat trien bai hang 10~t l~ptrinh vien tv nguy~n Tuy nhien, do Node.js v~n con non tn~, c6 nhi~u diemkhac bi~t so v6i cach l~p trinh truy~n th6ng, doi hoi mQt1uqng ki€n thlic nhitdinh ill cac l~p trinh vien, ph~n 16n nguai m6i b~t d~u c6 the g?P mQt s6 kh6khan khi ti€p c~n v6i cong ngh~ nay
Xuit phat ill cac 1y do tren, chung toi dff thlJc hi~n d~ tai "Tim hieu Node.js vaxay dlJng trang web dQc ngu6n tin"
Trong d~ tai nay, chung toi tim hieu v~ nhung ki€n thlic cO'ban c~n bi€t, cachthlic ho~t dQng, cac diem c~n chu y Clla Node.js va xay dlJng mQt Frameworkgiup de dang ti€p c~n v6i cong ngh~ nay cho nhfrng ai v~n con quen thuQc v6icach l~p trinh, phat trien ling d1)ng web truy~n th6ng d6ng thai dlJa vao d6phat trien mQt ling d1)ng web minh hQa nhfrng gi dff thlJc hi~n duqc
Lu~n van duqc chia thanh 5 chuang v6i nQi dung C1)the nhu sau:
Chuang 1: Gi6i thi~u t6ng quan v~ Node.js: Gi6i thi~u khai quat v~ congngh~ Node.js cling nhu khai ni~m, 1ichsu phat trien, cac d?c diem, cac bu6cd.n bi€t khi b~t d~u phat trien v6i Node.js nhu cai d?t, IDE, thu vi~n, tv xaydlJng mQt Framework c6 ciu truc ho~t dQng dlJa tren mo hinh MVC
Chuang 2: Gi6i thi~u v~ NoSQL va MongoDB: Gi6i thi~u cO'sa du li~uNoSQL rna dien hinh nhit 1a MongoDB v6n dang duqc su d1)ng rQng rffi choNode.js
Trang 4ChU011g 3: Xay d\fng ung dl;lng minh hQa: Phan tich, thiet ke trng dl;lng dQC
ngu6n tin RSS tr\fc tuyen
ChU011g 4: Trien khai tren di~n tmin dam may: Gi6'i thi~u cac bu6'c de t~lO,
trien khai m9t ung dl;lng tren dich V\l cua OpenShift.
Chu011g 5: T6ng ket
Y nghia ella ct~tiii
us Uti nghien CUu vS Node.js va cac ung dl;lng th\fc tien trong phcit trien cac
phc1nmSm, dich Vl;lm:;mg, d6ng thai cung cAp cai nhin sa lugc vS xay d\fllg va
trien khai ung dl;lng su dl;lng nSn tang dam may, giup tang cuang hi~u qua,
nang cao chAt luqng, giam chi phi
Trang 5Ml}C Ll}C
1.2/ Ljch su hinh thanh, m\lc tieu va SlJphat trien cua Node.js 14
1.4.3/ B6 sung thu vi~nnha Node package manager (NPM) 31
1.6.3/ C~u truccua JAWN (JAWN is Another Web-framework for
Trang 6CHUONG 2/ CO SO DO' LIEU NOSQL vA MONGODB 78
2.2.3/ Giam SlJ hi~n di~n cua cac nha quan trj cO' sa dfr li~u (DBAs
Trang 73.41Ket Iu~n 133
PHl) Ll)C A: Thiet l~p m6i truang cho PhoneGap 145PHl) Ll)C B: M(>t86 thu~t ngfr 8U d\lng trong lu~n van 147
Trang 8DANH sAcH cAc BANG BlED vAHINH vi
Hinh 1-2 s6 luqng website, server trien khai c6ng ngh~ Node.js (Ngu6n:
Hinh 3-1 Bieu tuqng RSS tren cac trang khi co ngu6n tin 95Hinh 3-2 N<)idung RSS khi dugc chuyen b~ng XSLT 99
Trang 9Hinh 3-5 Chuc nang dang nh~p 104
Trang 10Hinh 3-7 Giao di~n c~p nh~t thong tin nguai dung 123
Trang 11Chuang 1/Giai thi?u t6ng quan v~ Nodejs
CHUONG 11GIm THI~U TONG QUAN VE NODE.JS
14
1.11Khai ni~m Node.js
Node.js la nSn Umg giup cac nha phat tri~n ung dVng chi c~n dung ng6n ngfrJavascript d~ l?p trinh cho ca phia client va phia side, thay vi phai su dVngPHP, Ruby in Rails, Perl, nhu truac day d~ thlJc hi~n
Node.js rna ra mQt ky nguyen mai vS l?p trinh web do
- Kha nang ch~y JavaScript tren mQt may ao V8 JavaScript Engine r~t nhanh,t6c dQxu Iy dang kinh ng~c
- Kha nang quan Iy hang ngan SlJ ki~n d6ng thai va I?p trinh theo phong cachmai, t?n dVng thai gian thlJc thi I/O d~ phvc vv tiep cac yeu c~u dang dgi xu
Iy (ngugc I~i vai Java, C# hay mQt s6 cac ng6n ngfr I?p trinh khac)
- Giup mQt server co th~ gifr ca chvc ngan ket n6i song song cung Iuc, Ia khanang s6ng con cho nhfrng trang web c~n tinh nang xu Iy theo thai gian thlJchi~n nay - mQt xu huang thai d~i khi nhu c~u va t6c dQ Internet cang tang,smartphone, tablet ra dai nhu vu bao
1.2/ Lich sfr hinh thanh, ml}c tien va S,! phat tri~n cua Node.js
1.2.11Lich Slf hinh thanh
Joyent Ia t6 chuc qu6c te chuyen cung c~p ph~n mSm h~ th6ng, di~n toan dammay va cac goi h6 trg ky thu?t cho cac t6 chuc, doanh nghi~p va nha phattri~n NSn tang di~n toan dam may cua Joyent dugc cac c6ng ty tien tien trenthe giai ung dVng d~ tri~n khai dich vv tieu bi~u nhu m~ng xa hQi tuy~n dVngLinkedIn, c6ng ty kinh doanh trlJc tuyen Gilt Groupe, c6ng ty phat tri~n gametren m~ng xa hQi Kabam,
Trang 12Chuang 1/GiOi thi?u t6ng quan vJNodejs
Hinh 1-1 L~p trinh vU!n Ryan Lienhart Dabl
15
Ryan Lienhart Dahlia mQt l~p trinh vien tt.rdo qu6c tich My, sinh ra va 100len a Rochester, New York, hi~n dang sinh s6ng va lam vi~c cho cong tyJoyent tc;liSan Francisco Linh Vl,fCnghien cUu chinh cua Ryan la interruptibleparsers, event loops, response time histograms, phat trien nen tang webservers vm mQt s6 d\f an ngu6n rna tieu bieu nhu Ebb web server va module
"EY" load balancer cho Nginx
D\fa tren nhfrng kinh nghi~m tich lfiy ill qua trinh lam vi~c, Ryan da cho radOi nen tang Node.js ill nam 2009, phat trien dum S\f bao trq cua t6 chucJoyent, cong ty da h~u thufrn cho vi~c phat trien Node.js thong qua nhieu hinhthuc nhu dAutu tai chinh, h6 trq hc;ltAngkYthu~t va nhan l\fc phat tri8n
Nam 2012, Node.js duqc tc;lPchi InfoWorld binh chQn la cong ngh~ cua nam.Hi~n nay, tren cQng d6ng mc;lllg,Node.js lien !\Ic duqc dong gop, b6 sung vaphat tri8n bffi hang lOc;ltl~p trinh vien t\f nguy~n
GAn day, Node.js tra thanh mQt trong nhfrng cong ngh~ thuOng xuyen duqc
nh~c d~n va dang nh~n duqc nhieu S\f quan tam va h6 trq nhi~t tinh bffi caccong ty 100 nhu Microsoft, RedHat, Amazon,
Cho d~n nay, Node.js duqc phat trien d\fa tren gifry phep MIT License, v6n lamQt gifry phep phAn mem tt.r do duqc phat hanh bffi HQc vi~n Cong ngh~Massachusetts, duqc hQi d6ng MIT X sir d\lng Gifryphep nay duqc sOc;lllthaocho X Window System (d\f an tc;logiao di~n d6 hQa cho nguai dimg acac maytinh k~t n6i mc;lllgvao nam 1984) Trong do, cac quyen lqi troy c~p rna ngu6n
Trang 13Chuang 1/ Giai thi?u t6ng quan v€ Nodejs 16
•
clla nguai su dVng gi~y phep vftnwang t\TOOu cac gi~y phep ngu6n rna khac.Ngoai ra co rnQt s6 di~rn khac sau:
Kh6ng b~t bUQcphai c6ng khai rna ngu6n
Co th~ duqc chinh sua l;;ticho phu hqp v6'i th\Tc t~
Kh6ng c~rn su dVng ten Clla nguai gift ban quy~n vao rnvc dichquang ba san ph~rn, thuO'ng hi~u
Kh6ng b~t bUQc phai hi~n daOO sach t~t ca nhftng nguai rungtharn gia th\Tc hi~n d\Tan trong thaOOph~n phat tri~n Clla chuang trinh
Lo;;ti b6 thuQc tiOO copyleft kh6i gi~y phep (copyleft rn6 ta cach
su dVng lu~t bfm quy~n d~ lo;;tib6 t~t ca cac h;;tn ch~ v~ phan ph6i ban sao vacac phien ban tac ph~rn da duqc chinh sua cho rn9i nguai va yeu c~u phai baoluu quy~n tV'do nhu v~y trong cac phien ban chiOO sua)
D~ cung c~p du6'i MIT License, rna ngu6n phai kern theo nQidung ghi chu ban quy~n Clla MIT
Do quy~n lqi clla nguai su dVng duqc uu tien, gi~y phep nay tra nen ph6 bi~ntrong cQng d6ng rna ngu6n rna. Nha do, b~t ky ai cling co the tharn gia cQngd6ng phat tri~n cho Node.js t;;titrang web https://github.com/joyent/node
Gic1y phep nay la di~u ki~n thuc d~y t6c dQ phat trien Clla Node.js va gi~yphep duqc su dVng nhi~u cho cac project h6 trqNode.js hi~n nay
1.2.2/ Ml}c tieu:
Tru6'c do, Dahl thuang xuyen vi~t cac project d\Ta tren ng6n ngft C va thuanglien quan d~n server va event-driven D~n d~n anh nh~n ra anh thuang xuyenphai vi~t l~p di l~p l;;ti cung rnQt nQi dung code cho cac project khac nhau.Anh nh~n ra dftu C vftn la ng6n ngft yeu thich, anh vftn c~n rnQt ng6n ngft phuhqp han de l~p trinh server
Trang 14Chuang 1/ Gi6'i thi?u t6ng quan vdNodejs 17
M\lc tieu ban d~u Clla Dahlia lam cho trang web co kha nang push nhu trong
mQt s6 ung d\lng web nhu Gmail Sau khi thu nghi~m vai moi truemg duqc
vi~t trong cac ngon ngfr khac nhu Twisted cho Python, Perl ObjectEnvironment cho Perl, libevent cho C va EventMachine cho Ruby, Dahl did~n quy~t dinh chQn ngon ngfr Javascript va su d\lng V8 Engine duqc Googletung ra cach hIe do khong lau Nguyen nhan vi ngon ngfr Javascript chuaduqc dinh nghia API Nh?p/Xu~t va V8 Engine su d\lng ngon ngfr C rna anhquen thuQc Tir do, anh co the dinh nghia mQt quy uac Nh?p/Xu~t mai theo
huang SlJ ki~n va non-blocking Ngoai ra, theo anh, Javascript d~ dang han d~l?p trinh server, ch~ng hC;lnnhu khi vi~t IRC Server
Tuy nhien, do Node.js vftn can non tre, co nhi€u di~m khac bi~t so vai cachl?p trinh truy€n th6ng, doi hoi mQt luqng ki~n thuc nh~t dinh ill cac l?p trinhvien, ph~n Ian nguai mai b~t d~u co th~ g~p mQt s6 kho khan khi ti~p c?n vaicong ngh~ nay
1.2.3/S.,phat tri~n
1.2.3.11Nhu c~u sfr dl}.ng
Tir khi phat tri~n d~n nay, theo bao cao Clla W3Techs.com, mQt trang chuyencung c~p th6ng ke, bao cao, va x~p hC;lngwebsite thi s6 luqng website, servertri~n khai cong ngh~ Node.js ngay cang tang, tir 0.006% (thang 3/2012) len0.017% (thang 3/2013) Di€u nay cho th~y ti€m nang phat tri~n cao cllaNode.js trong tuang lai
Trang 15Chuang 1/Gim thi?u tJng quan vJNodejs 19
Dich V\l dang Uli tai li~u issuu.com: MQt dich V\l giup dang tai va chia se taili~u di~n ti'r ttvc tuy~n nhu sach, bao, t~p chi, tich hgp v&i rn~g xa hQi dequang ba tai li~u Trang web hi~n co 52 tri~u dQc gia vm 210000 nQi dungduQ'cdang tciihang thang va x~p h~g 614 (theo Alexa thang 2/2013)
Th6ng ke rn~ng xa hQi Klout.com: Trang web cung cc1pdjch V\l th6ng kern~ng xa hQi theo thm gian thgc cua ngum dUng (Twitter, Facebook,Google+) va co han 2000 d6i tac sau chi 1 nam thanh I~p Trang web xu Iygc1n 1 tY 1c1ngQi API rn6i ngay va hi~n x~p h~g 1793 (theo Alexa thang2/2013)
Quc~mIy project Trello.com: H6 trQ'theo d5i, quan ly cac cong vi~c nhorn hi~uqua bfulg rnQt giao di~n dan gian Trang web hi~n co han 1 tri~u user rn6ingay va x~p h~g 3456 (theo Alexa thang 2/2013)
1.2.3.2/ T6c dq c~p nh~t va phat tri~n
February 15th 2009 March 3rd 2013
Commrts 10 master excluding merge comml1S
Hinh 1-4 Bi~u dA th~ hi~n sA IAn Commit tren Github cua Node.js
ConlnOulon Type Commits
Nha gic1yphep ngu6n rna, thong thming trong cac dieu khoan rang bUQc,Node.js luon duQ'c cQng d6ng rn~g phat trien va sua 16i hang thang TheoGithub, hi~n nay Node.js duQ'c phat trien thanh 3395 nhanh phat trien (tinhd~n ngay 15/3) de c~p nh~t, b6 sung vao rna ngu6n chinh
1.2.3.3/ Cong ngh~ h8 trC}'Node.js
Chi trong thai gian ngiin tir nam 2009 d~n nay, Node.js da thu hut sg chu ycua hang ngan I~p trinh vien, phat trien h~ th6ng quan Iy thu vi~n NPM va thuhut ca.cac cong ty rn6'i khai nghi~p Nguyen nhan nfunacac cong ngh~ h6 trQ'Node.js, giup gicii quy~t cac nhan t6 quan trQng nhu kha nang xu Iy, thai gian
Trang 16Chuong 1/GiOi thi?u t6ng quan vJNode.js 20
va cac vc1nd~ th\l'c t~ rna truac day thuang kho giai quy~t khi su d\lIlg vm cac
web server khac
Ngon ngft I,p trinh Javascript va cuqc chi~n gifta cac trinh duy~t
Minb 1-5 Brendan Eicb, ngtriri sang tlJO nen Javascript
Javascript duQ'c Brendan Eich sang t~o t~i Netscape van nam 1995 va ch~ytren phien ban Netscape 2 duQ'ctung ra van nam 1996 Trong giai do~ phattri~n, Javascript co ten la Mocha, khi tung ra phien ban beta co ten laLiveScript, cu6i cung, vi m\lc dich ti~p thj, ten Javascript duQ'c chQn d~ ph6bi~n cho mQi nguOi Them van do, mQt s6 ten khac nhu ECMAScript, Jscriptcling duQ'c dung d~ gQi ngon ngu nay Vai nhi~u ten gQi, d~c bi~t vm tenJavascript vai ti~n t6 Java da khi~n khong it nguOi nhfun Iftnvm ngon ngu l~ptrinh Java cua Sun Microsystem, hi~n da thuQc v~ cong ty Oracle
Sau khi Netscape 2 tung ra, Microsoft phat tri~n kha nang xu ly Javascripttren trinh duy~t internet Explorer 3 vai ten JScript Khi xu huang duy~t webbung n6, Javascript duQ'c cai d~t va su d\lIlg tren hang lo~t trinh duy~t khac
nhau Ngon ngu nay dftn tra nen m~ me han, la mQt ngon ngu quan trQngtrong xu ly tuang tac vai nguOi dung, nhelt la trong vi~c xu ly Ajax - mQtcong ngh~ c~p nh~t nQi dung trang web rna khong cftn n~p l~i trang ThelyduQ'c di~u mlY, cac nha san xuelt trinh duy~t lien t1)c tung ra cac phien banmai, trong do t~p trung m~ a engine xu ly javascript nhu Webkit(Safari),V8(Google Chrome), Chakra(IE), Vi~c t~p trung nay gop phftn giup ngonngft Javascript phat tri~n nhanh chong, hang lo~t cac cong C\lh6 trQ'l~p trinhJavascript phat tri~n
Trang 17Chuang J/ Gim thi?u tt5ngquan vJNodejs 21
s6 lUQ11gl~p trinh vien bi€t ngon ngfr tang cao do Javascript duQ'c dua vaogiang khong chi cho cac khoa hQc l~p trinh vien rna cho ca cac khoa hQc thi€tk€ Hi~n nay, Javascript duQ'c hang lo~t cac trang web, n6i b~t lacodecademy.com khuy€n khich la ngon ngft dAutien danh cho nguOi mai biltdAul~p trinh
Th€ nen, wac day, Javascript thuOng duQ'cnghi ngay nhu mQt ngon ngft bigiai h~ ben trong trinh duy~t va xu ly aphia client Tuy nhien, vi~c su d\lllgngon ngft l~p trinh khac gifta phia server va client vfuJ.bQc lQ nhuQ'c di~mtrong khau phat tri~n, duy tri va rna rQng
Nay, nha S1)'h6 trQ'm~nh me cua cQng d6ng m~g, Javascript co th~ duQ'cSlr
d\IDg d~ l~p trinh cho pilla server Vi~c su d\lllg Javascript lam server giupnguOi l~p trinh t~ d\IDgduQ'cnhUng th€ m~ ella Javascript nhu ham duQ'clUll tm va gan nhu Object, k€ thira theo phuong phap prototypal inheritance,don gian so vai class truy~n th6ng, khong rang bUQcki~u dft li~u Cllabi€n, langu6n cam hUng cho S1)' ra dOi CllaJSON
V8 JavaScript Engine
chilc hful hAuh€t mQi nguai d~u timg su d\IDghon mQt trinh duy~t tren maytinh Khi do, n€u la nguOi dimg thuOng xuyen CllaGoogle, nguai ta khong th~khong nghe noi d€n trinh duy~t Google Chrome
chrome
Hinb 1-6 Bi~u tuvng Google Cbrome va Javascript V8 Engine
Google Chrome la mQt trinh duy~t duQ'c cong ty Google dAu tITkha nhi~u,trong do g6m nhi~u thanh phfrn hQ'Pl~i, IDQttrong nhUng thanh phfrn kha quantrQng giup ~o nen Google Chrome chinh la Google V8 JavaScript Enginecung cfrp nhan xu ly Javascript qUaIl trQng giup nguOi dimg co cam giacnhanh hon hful so vai cac trinh duy~t khac
Vi sao Google t~o them V8 JavaScript Engine trong khi dff co nhi~u engine
xu ly Javascript khac tren thi wOng?
Trang 18Chuang 1/ GiIJi thi?u t6ng quan v~Nodejs 22
V 6'i cong ty mly, hQ da va dang phat triSn m~nh cac dich V\l duqc r~t nhieunguai yeu chuQng, do la GMail, Google Docs (Google Drive), GoogleMaps, Cac dich V\l nay khong con dan thu~n xu Iy tren phia client nfra, hQc~n xu ly lien Wc mQt luqng 16'n cac request dlJa tren cong ngh~ AJAX v6ndlJa tren Javascript Google cung rQng rai h6 trq phat triSn AJAX v6'i bQ congC\l Google Web Toolkit cua hQ, co thS giup Java applicatio~ h6 tra AJAX.The nen, cung khong co gi I~ khi hQ quyet tam t~o nen engine m6'i dS tang t6c
xu Iy Javascript han nfra V8 JavaScript engine duqc t~o ra va da qua m~t cac
JavaScriptCore (Safari) Neu frng d\lng web c~n t6c dQ xu ly Javascriptnhanh, V8 JavaScript engine la SlJ llJa chQn thich hqp SlJ tang t6c nay ph\l
thuQc vao s6 luqng code va khci nang cua Javascript dS thlJc thi Neu mQt hamthuerng xuyen duqc gQi l~i, t6c dQ se tang len dang kS so v6'i vi~c gQi hanglo~t ham khac nhau Nguyen nhan la 0 cach thiet ke cua V8 JavaScriptengme
Nhan xu ly V8 JavaScript engine dugc viet b~ng ngon ngfr C++, cung c~pcach tiep c~n hoan toan khac so v6'i cac phuang thuc xu ly tru6'c day Ngay tu
khau thiet ke va phat triSn, Google da t~p trung vao cac thanh ph~n quantrQng chinh sau:
Sinh ra rna may: V8 JavaScript engine se t¥ dQng sinh ra rna may tru6'c khithlJc thi trong cac cach tiep c~n tru6'c day la thlJc thi byte code ho~c phi endich (interprete) code, h6 trq tai su d\lng, thlJc thi nhanh va hi~u quci han.Trong qua trinh nay, trinh bien dich co thS t6i Uti cac code quan trQng c~n gQil~i nhieu l~n
Truy c~p properties nhanh han: Javascript la ngon ngfr g~n lien v6'i object vacac property, trong do property co thS them vao va xoa kh6i object b~t kY lucnao Cach tiep c~n tru6'c day thuang su d\lng ca che gi6ng nhu tu diSn, c~nproperty nao, phcii tra I~i vi tri cua no tren bQ nh6' V8 JavaScript engine duqcthiet ke l~i, nha khci nang sinh ra rna may, cac bien duqc d~t t~i vi tri c6 dinh,xac dinh boi trinh bien dich
Phat triSn garbage collection: thay vi thuang xuyen tim va dQn bQ nh6' khiobject khong con lien ket, V8 JavaScript engine se t~m dung xu Iy code khi
Trang 19Chuang J / GiOi thi~u t6ng quan vJNodejs 23
l~y l(;libQ nh6 cua cac object khong con lien ket den, quan 1:9" ch~t cac object
va pointer trong bQnh6, giam S\Iphan manh bQnh6 va hl;lllche memory leak
Node.js
Hioh 1-7 Node.js dlpl treo V8 Javascript Engine
Nha ket hQ'Pgifra Node.js Va V8 JavaScript engine, webserver co the th\ICthicac (mg d\lllg Javascript Ian mQt cach hi~u qua va t6c dQnhanh han
1.3/ U u nhtrQ'c di~m
1.3.1/ Uu di~m
DtrQ'c h6 trQ' m~nh til' cqng dAng rna nguAn rna va cac cong ty IOnV6i vi~c sir d\lllg gi~y phep MITIBSD, Node.js rna ra canh cira m6i va thu vicho cQng d6ng ml;lllgdong gop va phat trien Nha do s6 luqng project choNode.js khong ngimg tang len ca v~ s6 luqng va ch~t luqng Di~u nay khiencho cac cong ty Ian cling dAu ill van node.js vm cac san phfun nhu YahooCocktail, Cloud9 IDE, Walmart, Ebay,
Sir dl}ng ngon ngii' Javascript ph8 bi~n, di hf}c, Iinh ho~t, uy~n chuy~nJavascript dfi xu~t hi~ntil r~t s6m tren trinh duy~t Netscape, va til do dAndAnchiem IInh mang l~p trinh cho client tren trinh duy~t nha nhi~u Uti diem dfiduqc gim l~p trinh cong nh~ rQng rfii
H6 trQ' rn~nh chuin JSON (JavaScript Object Notation)JSON la chuck dinh dl;lllgdft li~u duqc l~y cam h(mg til c~u truc co tinhdan gian va d€ hieu cua ngon ngft Javascript vi the duqc Node.js h6 trq mQt cach t\I nhi~n va ml;lnhme, khien Node.js tra thanh mQt l\Ia chQn
tuy~t vai de phat trien cac (mg d\lllg truy~n tcii dft li~u qua m(;lngbfuIgJSON
Cong ngh~ AJAX va kh3 nang tai sir dl}ng I~i nqi dung codeKha nang xu 1:9" nhi~u requests vm thai gian response th~p cung vmvi~c dung l(;licung mQt dOl;lllcode Javascript, chfulg hl;lllnhu validationtren ca server lfuI client giup vi~c phat trien rnQt Website chi v6i rnQt
trang tra nen d€ dang han bao gia het.
Trang 20ChU017g1/Gi6'i thi?u t6ng quan vJNode.js 24
Mo hlnh l~p trlnh mrri, sfr d\fng cach l~p trlnh non-blocking I/O
Khac v6i l?p trinh m;;1ngtrong Java, Node.js cho phep ti~n trinh ti~p tlfc
xu ly tac Y\l khac sau khi request mQt tac Y\l dQc/ghi len bQ nh6 ngoaihay truy€n dfr li~u qua m;;1ngrna khong phai block thread hay process.Cac tac Y\l 10 do sau khi thgc thi xong se gQi mQt ham callback da:dugc gan tru6c do de thong bao hoan t~t va thgc thi nhfrng xu ly dgatren dfr li~u theo yeu celu
T8c oQxu ly nhanh (nhO' V8 engine)
V8 la JavaScript Engine cua trinh duy~t Google Chrome Khi V8 ra dai, no da:t;;1ora cUQc cach m~mg cho cac trinh duy~t, boi vi t6c dQ cua no nhanh hondang ke t6c dQ cua JavaScript engine cua Firefox, Safari v.v
Theo trinh bay cua Ryan Dahl tren nodejs.org, khi co 100 k~t n6i d6ngthai va server celn tra v€ nQi dung 1 MB dfr li~u:
Node.js co the xu Iy 822 yeu celu / giay
nginx co the xu Iy 708 yeu celu / giay
thin co the xu Iy 85 yeu celu / giay
mongrel co the xu Iy 4 yeu celu / giay
Nhi~u thtr vi~n, d~ cai o~t (nho- npm)
npm la mQt chuong trinh quan Iy packages (libraries) thgc thi tren Linux quacommand line (Linux shell), giup quan Iy, cai d~t va publish thu vi~n MQithu vi~n cua Node.js d€u dugc dang kY t?i https://npmjs.org/ va day la nai denpm tai xu6ng va b5 sung thu vi~n cho nguai I?p trinh khi celn
Xay dlfng h~ th8ng vm o~c tinh scalable cao
Ngay tu ten cua Nodejs da: noi len di€u nay, ill node nghia la ffiQt nut trongm?ng cac server lien k~t v6i nhau Node.js d~c bi~t chu trQng d~n phan tancac server de xu Iy nhu celu request cao cua Internet nhu hi~n nay V 6i cach
phan tan nhu V?y, vi~c g~n them hay bat di server se d~ hon r~t nhi€u, d6ng
thai bao dam dugc uptime cao cua toan bQ h~ th6ng
Trang 21Chuang 1/ Gi6'i thi?u t6ng quan vd Nodejs 25
1.3.2/ Nh U'Q'cdi~rn
Phai t1}'xay d\fng rnQi thrr
Node.js hi~n chi cung cAp n~n tang, th~ nen, nguai l~p trinh phai tv cai d~tm9i thu d~ co th~ t?O nen ung d\lng web mong mu6n, ch~ng h?n, d~ t?O mQtHTTP Server, nguai l~p trinh bUQcphai hi~u cach thuc tuong tac gifra WebBrowser va Server d~ cai d~t cac ham xu ly phil hqp Tuy nhien, v6i SlJh6trq
tir cQng d6ng m?ng, l~p trinh vien co th~ tim thAyrAtnhi~uhuang din vathu
vi~n xu ly cac chuc nang cc1nthi~t
Kern hi~u qua khi ch~y cac rrng d1}ng doi hoi tfin su~t xu ly cao
Node.js khong philhqp cho cac tinh hu6ng xu ly ng6n nhi~u CPU nhu tri tu~nhan t?O, encode/decode video, cryptography, Th~ nhung Node.js h6 trq
vi~t cac addons b~ng ngon ngfr C/C++, vi th~ cac tac V\l xu ly n~ng co th~duqc implement b~ng C/C++, sau do build ra thanh mQt addon cua Node.js d~ho?t dQnghi~u qua hon
Ben c?nh do co th~ su d\lng Node.js k~thqp g9i mQt process khac d~ xu lycac tac V\l n~ng, k~t qua xu ly xong se duqc tra v~ cho Node.js qua hamcallback, dam bao xu ly thong su6t
Node.js ra dai tir nam 2009, cho d~n nay dii la 3 nam, v6i mQtcQng d6ng phattri~n ClJCky nang dQng nhung vin kho co th~ tranh khoi hi~n thlJc non tre,thi~u trai nghi~m so v6i cac n~n tang dan anh khac nhu PHP (1994), Python
(1980), Perl (1987), Vi~c trng d\lng vao kinh doanh, thuong m?i va cac ungd\lng doi hoi dQtin c~y cao cua Node.js vin con h?n ch~ do tinh 6n dinh chuaduqc ki~m chung cua no Tuy v~y, vin khong ngan duqc suc hut cua Node.jsd6i v6i cac cong ty Ian
Trang 22Chuong 1/GiOi thi?u t6ng quan v~Nodejs
Build va cai d~t tren cac h~ di€u hanh Linux:
cd~
git clone https://github.com/joyent/node.git
cd node
git checkout vO.8.18 #ChQn phien ban mai nhAtva tai v€ bAnggit
#tir trang web http://nodejs.org/
.Iconfigure
make
sudo make install
H~ di€u hanh Ubuntu Linux (cai d~t bAngphien ban binary - build sAn):
26
cd~
sudo apt-get update
echo "Y"Isudo apt-get install git-core curl build-essential openssllibssl-devecho "Y" Isudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-Iea/node.js
sudo apt-get update
echo "Y" Isudo apt-get install git
echo "Y" Isudo apt-get install nodejs npm
Cai d~t va sir d\lIlg Node.js tren h~ di€u hanh Windows, cfrn tai file cai d~td~g msi tt;li:http://nodejs.org/download/
Giao di~n sao khi cai (fit xong:
Trang 23Chuang 1/ GiOi thi?u t6ng quan vJNodeJs 27
Hinh 1-8 Giao di~n Node.js version 0.8.18 tren Ubuntu.
MQtSa I~nh co"ban san khi cai dit:
Khi oo?P l~nh node tren cua s6 dong I~OOkhong kern s6, Node.js se vim ch€dQRead-Eval-Print-Loop
Trong ch€ dQ D<lY, nguai dung se go rnQt hay OOi€udong code, sau khi goxong, Node.js se th\fc thi va hi~n k€t qua, qua triOOnay lien tl)Cl~p l~i den khingum dUng thoat
.break Khi dang so~ thao, n€u khong thfiy cac dfiu dong ngo~c cfuI thi€t,Node.js se chuy~n ch€ dQOOi€udong Twang hqp rnu6n thoat, nh?P I~OOnaytren bfit 10' dong nao
.clear Sau khi chiOOsua trong Node.js, gQi I~OOnay n€u cfuIreset v€ ban dAu exit Thoat Node.js
.help Hi~n daOOsach tfit ca cac I~OOh6 trQ"
.save LUlltfit ca cac I~OOda nh?p van file
.load Th\fc thi file da viet s~n
Trang 24ChU011g1/Giiri thi?u t6ng quan vJNodejs
Ngoai ra, co th~ nhelncac t6 hgp phim sau:
<etrl> +C Tuangtv nh~p break Nheln 2 lftn d~ thoat
<etrl> +D Tuangtv nh~p exit
28
1.4.2/ Sfrdl}.ngIDE hB trg I~ptrinh
Hi~n nay, co reltnhi~u IDE h6 trg l~p trinh cho Node.js Trong do, l~p trinhvien co th~ t~n dVng cong ngh~ di~n toan dam may d~ lam vi~c tflJc tuy~nho~c tv cai d~t IDE len may tinh
1.4.2.1/ Sfrdl}.ngtr\fe tuy~n qua e9.io
C9.io vi~t tAt cua Cloud9, la m9t dich V\l su dVng cong ngh~ cua Node.js,cung celpmoi truang phat tri~n cho Node.js, HTML, JavaScript, CSS, ngoai
ra con co XML, Python va Ruby Vi su dVng online, nguai dung chi cftn duynheltrinh duy~t cung m9t duang truy~n Internet nhanh va 6n dinh
Sau khi t?O xong tai khoim tren c9.io, nheln van mvc "Create NewWorkspace"
Trong menu hi~n ra, chQn"Create a New Workspace" d~ t?Oproject m6'i ho~cchQn"Clone from URL" n~u mu6n phat tri~n code tu m9t Workspace s~n co.Trong cua s6 "Create a New Workspace", d~t ten Tuy y trong mvc "Nameyour workspace"
Trang 25Chuang 1/ Gim thi?u t6ng quan vJNodeJs
Create a New Workspace Name your wor1cspace
WOflGP3-:e PnvaOl' 0 Open and OISCO'J'ef"3b1e • Pnvate to rtIe pe~e IU'Mle (1 out of 1 ,.ft)
,
Ty'pe Of worts pace • Grt Uercurial FTP SSH
Grt works paces dont have any options to set at this time
29
CANCEL
Hioh 1-9 Cfra sA"Create a New Workspace" cua C9.io
Trong rn\lCWorkspace Privacy:
- Chc.m"Open and Discoverable" n~u rnu<3ncho phep beltkY ai cling coth~ tim thely va truy c~p, my chQn nay phil hQ'Pcho nhUng project rna ngu6n
rna,ai cling co th~ vao, phat tri~n thang cac nhanh khac nhau
- ChQn "Private to the people I invite" n~u rnu<3nchi cho phep nhUng aiduQ'crnm rn6i truy c~p duQ'c,phil hQ'Pcho nhUng project rna ngu6n dong Tuynhien, c9,io hi~n chi cho phep rnQt Workspace nay rnQt tai khoan N~u rnu<3nnhi€u hon, cAnphiii chuy~n sang tai khoan co phi
Sau do, chQn Create va cha rnQt hIc d~ c9.io chufrn bi rnoi wang lam vi~c.Sau khi hoan telt,chQnten Workspace va nhfrn "Start Editing"
Giao di~n lam vi~c cua c9.io hi~n ra nhu sau:
Trang 26Chuang 1/GiOi thỉu t6ng quan vJNodejs
Roo: B::"-~~~" F, : tlo!!!w CoiIt" ;~ 9\¥(> ~ to> •., # •.• - ÕUf'l - ~~
30
rlORJ(SPẶf FUS
.• , •
• ;'~j ~ :::e:r.=:.e:;: -:.1':.18~::::J~:::1:::l -:'~.e::l:-u:H ::E :~:-.-:Ị l:.:.e • •.C\: :!!.:l txt:;;:e :;l".e :::::- ••.1:0';1 :=.:.::.:b
~'l': :e:.::e A:1~ ~:::~te ::.ue: [:::e:to::e:;:.: (e:l '1:::~~:.th~.-:::r.: !l.Ju::::1l=::1e_:~w:' l: :!::.~::::
• ::::e,,:e :.ẹ.•.:::ẹ! ~: !~::k'.•~: ~::::)e:':.
• iO:1:1 ";í.ẹ.- :: :: :;:: t; eze:-J:':":'';J :he ::ll~l •.iI :=-c.:1 1:": 1:1:1 (:::e:, ::le: :::e3 • J [E:.:.e:::]
• ::::ẹ!:.e" ::rl: '101:.::1': :1:' c:e ~:;Jlhej:: :he =e:.::':.e :•.:U).U:' sjje::l
;1':'::~:-:t'!.:1:1e::l:.e •• :l:eJl' [E::l':t:]
• ru"~ :.I:.e :=.:.: :;~.'ii! :::e=:e ';I:'': ~:;"h [:=tt :::l~e! ~.!I,:e:::- ir::: :e:J rhl't', 1':! :: :h.:.s tea::;': 'JÍ:::C::: ;~'J ~leue\'1:01': ::1:.eez:elle::l': :el':~:::ee :=:t P:,:t.'~.::=J l" ~'u •.•• ';
:: ;'::::.1Cel',: :1:.:1 -:a: •.~:::, ~e:ẹ :ef!l ::ee :: !l.e:C J;:,Jl nt !"'1::~= (@:l:~:!l:1r;) r::'I1~:~=~ :~":ll~
Hinb 1-10 Giao dĩn lam vĩe eua C9.io
T~i day, l~p trinh vien co th~ b~t dftu vi€t code va nhfuI Run d~ b~t dftu ch~y,trong truang hgp cfuI cftu hinh them tinh nang, co th~ nhfuI Alt + T d~ vaoLinux Shell d~ cftu hinh
Ngoai ra, c9.io cilng h6 tr<)lien k€t d€n cac nha cung cftp dich V\l dĩn toandam maỵ Sau khi lien k€t tai khoan nguai dimg cua c9.io vm tai khoan cuanha cung cftp dich V\l dĩn toan dam may, ngum dung co th~ trĩn khai ngaytffig d\lIlg web cua minh tn.rc tuy€n
1.4.2.2/ Cai d,t va sfrdl}og Web Storm IDE
Welcome to JetBrains WebStorm
Hinb 1-11 Pbin m~m WebStorm IDE
Trang 27Chuang 1/ GiIJi thi?u t6ng quan vJNode.js 31
WebStorm IDE duqc phat trien boi c6ng ty JetBrains, h6 trq nhi€u n€n tangnhu Windows, Mac OS, Linux IDE nay co gia $49, cung c~p m6i trucmg h6
trq l~p trinh Javascript, Node.js, PHP, CSS, HTML kha m~mh hi~n nay.Chuang trinh co cac Uti diem chfnh la:
Giao di~n than thi~n, g9n gang, xu Iy nhanh
Quan Iy project d~ dang
H6 trq code complete va code suggestion
H6 trq quan ly rna ngu6n (d(tc bi~t la Github)
Co nhi€u plugin, macro b6 sung
TV Iuu thay d6i
Be cai d(tt phien ban dung thu 60 ngay, nguai dung co the truy c~phttp://www.jetbrains.com/webstorm/download/index.html#linux file cai d(tt
co ten d:;mg WebStorm-*.tar.gz Sau do giai nen va ch~y file WebStorm.shtrong thu mve bin vira giai nen
tar xfz WebStorm-* tar.gz
chmod +x WebStorm.sh
./WebStorm.sh
1.4.3/ BB sung thO'vi~n nhir Node package manager (NPM)
Npm la mQt trinh quan Iy va phan ph6i cac goi thu vi~n qua dong I~nh chonode.js Nha npm, m9i nguai co the d~ dang tim va tai cac module mQt cacht\f dQng qua m~ng, kh6ng phV thuQc vao h~ di€u hanh, chi vai mQt cau I~nh.Ch~ng h~n: npm install less
TiTphien ban 0.6.3, node.js dfnh kern npm m(tc dinh trong goi cai d(tt Truac
1.4.3.11 cfiu truc g6i thO' vi~n trong npm
Trang 28Chuang 1/ Gilri thi?u t6ng quan v~ Nodejs 32
Ngoai cach tai va cai d~t thll c6ng, nha san xu~t/phat trien co the t~o thanh goi
de phan ph6i Goi thu vi~n npm mieu ta c~u truc trong file package.json baog6m ten goi, phien ban, cac c~pthu mvc, cac module phV thuQc c<1ndugc caitruac
File package.json don gian co c~u truc nhu sau:
{
"name": "Ten goi cai dat",
"description": "Noi dung mieu ta ve goi cai dat",
Cac the quan tr9ng c<1n luu y trong file nay la "name",
"dependencies" Trong do, cac the nay co ynghla nhu sau:
npm search ten _goi
The version: khai bao phien ban goi cai M~c dinh, khi dung l~nhnpm install ten_goi (kh6ng co them cac tham s6) se tai goi cai vaiphien ban mai nh~t
The main: TruOng hgp nguai dung mu6n nhom thu vi~n vao mQt thu mvc, nguai dung c<1ndua duang d~n clla file chinh vao the nay de b~td<1u
Trang 29Chuang 1/ Gi6i thi?u t6ng quan v~Node.js 33
Trong truang hqp c~n cac thu vi~n phv, nguai l~p trinh c~n khai bao trong the
dependencies d~ npm tlJ dQng d.i cac module khac di kern v&i module d6 NQidung khai bao cac g6i phv thuQc nhu sau:
- G6i one se cai phi en ban c6 version trong khoang 1.0 t&i 2.5
- G6i two se cai cac phien ban c6 version trong khoang 0.9 t&i nh6 han2.3
- G6i three se cai mQt trong cac phien ban cua dong version 0.5 (0.5.1 t&i0.5.9)
- G6i four se cai ban dugc c~p nh~t g~n nhfrt
NSu khong tim thfrt g6i phil hqp, qua trinh cai d~t se bi huy
Nguyen nhful c6 SlJ gi&i h~n version vi node.js dugc lien tl)c c~p nh~t, mQt s6phien ban m&i han c6 th~ khong hoan toan tuang thich
Ngoai ra con cac the khac khac:
- The description giup nha phat tri~n mo ta tinh nang cua g6i thu vi~n
- The homepage cung cfrp dia chi trang web cua nha phat tri~n d~ h6 trg
thong tin cho thu vi~n nay
Trang 30Chuang 1/Giai thi?u t6ng quan v~Node.js
The author cung c~p thong tin lien h~ nha phat tri~n
1.4.3.21 Sir d\lng npm
34
Npm tlJ tim cac goi thu vi~n nguai dung c~n tren Internet (tu trang chu
http://npmjs.org) thong qua cau I~nh sau:
npm install ten~6i
Neu nguai dung khong nh& d~y du ten goi rna chi nh& mQt ph~n ten thi ngoaicach vao trang https:llnpmjs.org d~ tim, npm cho phep tim b~ng I~nh
npm search nQi_dung_tim
Tuang tg, thong tin ve goi cai d~t nhu trang chu, nha phat tri~n, ghi chli ta
co th~ dung cac I~nh
npm view ten_g6i
Neu mu6n tim chi tiet han nhu phien ban, nha phat tri~n:
npm view ten~6i version
1.51L~p trinh vOl Node.js
1.5.1/ Phuong thuc l~p trinh
Event-driven
Tru&c day, theo cach truyen th6ng, mo hinh thread-based xu Iy cac yeu c~umQt cach I~n IUg1:,thread se bi khoa va cha den khi yeu c~u dang xu Iy hoantftt r6i m&i chuy~n sang yeu c~u ke tit~p.Theo cach nay, neu co qua nhi~u yeuc~u c~n dugc xu Iy, h~ th6ng se c~n t~o them nhieu thread
Dieu nay d~n den qua tai vi:
- C~n 1 lugng bQ nh& nh~t dinh danh cho thread du ho~t dQng haykhong
- C~n 1 khoang thai gian nh~t dinh d~ CPU chuy~n ngfr canh thgc thigifra cac thread (context switch)
Trang 31Chuang 1/ GiOi thi?u t6ng quan vJNodejs 35
Nhu v~y, s6 IUQ1lgrequest ti I~thu~ vm dung IUQ1lgb<)nh6 va thOi gianchuy€n ngft carm Khi d~t d€n nguang b<)nh6, h~ th6ng co th€ se bi tri tr~ho~c ngimg xu Iy (overflow)
Vi v~y, Event-driven duQ'cdua van su d\ll1gthay cho cach truy~n th6ng, giupgiai quy€t nhftng vdn d~ ben tren V6i Y ill6ng co ban la chi v6i m<)tprocess
co th€ dimg d€ xu Iy nhi~u request lfuI luqt Cac request m6i d€n se duQ'cd~tvan trong event queue va lfuI luqt se duQ'c I~y ra d€ xu Iy Khi m<)trequestdang duQ'c xu Iy cac request khac trong event queue se phai cha d€n luqtminh, dfuI dfuI t~t ca request se duQ'cxu Iy h€t Nhung a day I~i nay sinh ram<)tvdn d~ do la n€u m<)trequest cfuI xu Iy qua lau (chi€m I~y process vach~y lien t\lC, khong nhuang cho request khac) ho~c khi€n cho process do biblock (do cha I/O ill nguOi dung, cha I/O ill network, cha I/O ill disk, ) thilam cach nao d€ dam bao cac request chia se m<)tprocess m<)t cach congbAng Giai phap la NON-Blocking 10
NON-blocking I/O
Hinh 1-12 Blocking I/O
M<)tthread trong m9i thOi di€m chi co th€ th\Ic thi m<)ttac V\lI/O cho d€n khihoan t~t
Hinh 1-13 Non-blocking I/O
M<)tthread co th€ yeu cAu cung hIe nhi~u tac V\l I/O va duQ'cthong bao m6ikhi co m<)ttac V\lhofm t~t
f)6i v6i Non-Blocking I/O, 1 process se t~ d\ll1g thOi gian th\Ic thi I/O d€ph\lc V\l ti€p cac yeu cAu dang dqi xu Iy Khi th\Ic thi tac V\l Non-BlockingI/O, nguai I~p trinh cfuI truy~n van m<)tham callback d€ sau khi th\lc hi~nxong, ham callback se duQ'cg9i Trong su6t qua trinh do, cac ham khac vfuI
Trang 32ChU011g1/ Gi6'i thi?u t6ng quan vJNode.js 36
co th~ ti~p tl}c xu ly cac yeu c~u, di~u nay giup ti~t ki~m tai nguyen va giamthai gian dap (mg
Ham callback
Day la mQt d~ng g9i ham thuang xuyen dugc su dVng trong ngon ngfr l~ptrinh Javascript, nh~t la khi su dVng jQuery Ham nay se g9i dugc g9i d~n khiqua trinh xu ly truac hoan thanh
1.5.21Global Objects (d8i hrQ1lgtoan cl}c)
Nhu cac ngon ngfr l~p trinh khac, node.js khong khuy~n khich su dVng bi~n
toan cvc, tuy nhien node.js cung c~p mQt s6 d6i tugng toan cvc quan tr~mg d~
console.log ({foo: 'bar'}); II => [Object Object]
MQt I~nh co chilc nang nhu console.logO la console.infoO
console.error ([data], [ ])
Dung d~ xu~t nQi dung mong mu6n ra stderr
VD: console.error('Loi xay ra'); II => Loi xay ra
MQt I~nh co chilc nang nhu console.errorO la console.warnO
Trang 33ChU011g1/ Gi6'i thi?u t6ng quan vJNodejs
console.dir (obj)
Xu~t nQi dung cua 1 object d~n stdout
console.dir ({foo: 'bar'}); 11=> {Foo: 'bar'}
37
N~u expression cfin danh gia la co gia tri la false thi AssertionError se xu~tnQi dung message ra console
console.assert (1)2, 'Loi xay ra ');/1 =>AssertionError: Loi xay ra
console time(la bel)
Banh d~u thai gian bit dfiu
Ngung bQ d~m thai gian va xu~t thai gian
Vi d\}:
conso Ie.time(' dem _tho i_gian ');
for (var i = 0; i < 100; i++) { ;}
console.timeEnd('dem_thoi_gian'); 11=>dem_thotgian: 359ms
console.trace(label)
Xu~t stack trace ra stderr eua vi tri hi~n t~i
1.5.2.21 Process
Trang 34ChU011g1/Gi6'i thi?u t6ng quan v~Nodejs 38
Node.js cung c~p d6i tuqng process cung cac ham quan tr9ng dS xu ly choprocess dang che;ty
process version
Xu~t phien ban cua node.js
console.log("Version:" +process.version); II=> Version:vO.8.17
process.execPath
Xu~t duang d~n d~n thu m\lc thlJc thi chinh cua chuang trinh
VD: "/usr/local/bin/node" (tren linux)
process platform
Nen tang be;tndang su d\lng
YD' 'darwin' ,'freebsd' ,'linux' 'sunos' 'win32', ,
process.pid
Xu~t process ID hi~n thai
process.stdoutO
M(>t lu6ng co thS ghi duqc d~n stdout
VD: I/I)inh nghla ve console.logO.
console.log = function (d) {
process.stdout write (d + '\n');
};
process.stderrO
Tuang tlJ nhu process.stdoutO nhung aday la ghi d~n stderr
process.stderrO va process.stdoutO khong gi6ng nhu cac lu6ng khac trongNode, vi thuang bi block:
Trang 35ChU011g1/Giai thi?u t6ng quan v~Node.js 39
Ca 2 bi block trong truang hqp lien quan dSn cac t~p tin ho~c TTY filedescriptor
Ca 2 kh6ng bi block khi xu 1)'cac pipe
process.stdinO
MQt lu6ng xu 1)' dQc tLr stdin Lu6ng stdin bi dung mQt cach m~c dinh nenphai gQi process.stdin.resumeO dS dQc tiSp
process.cwd( )
Tra v~ thu m\lc lam vi~c hi~n ~i
VD: console.log('Thu muc hien tai: '+process.cwdO);
p rocess.ch dir( directo ry)
Thay d6i thu m\lc lam vi~c hi~n t?i
VD: process chdir('/ data');
Trang 36Chuang 1/ Giai thi?u t6ng quan vJNodejs 40
Tuong tlJ nhu process.setuidO tuy nhien duqc su dt,mg trong group, cling ch~pnh~n mQt s6 gia trj ho~c chu6i d~i di~n (IIDH Linux)
VD: process.setgid(20) ho~c process.setgid('mygid')
Trang 37ChU011g1/ Giai thi?u t6ng quan v€Nodejs 41
Khi th\Tc thi file vai cac tham s6, process.argv cung c~p truy c~p vao tham s6,gia tri d~u tien la "node", thfr hai la ten t~p tin, va gia tri con l;;lila cac tham s6
process exit ([code])
L~nh process.exitO la g~n gi6ng ham exitO trong ngon ngfr C, bao hi~u thoatchuong trinh
M~c dinh, kSt qua thanh cong tra v~ gia tri o. K~t qua tra v~ Ian hon 0 la th~tb~i
1.5.2.31 Cac Global Object xu Iy ThO' vi~n
requireO
Dung d~ g9i thu vi~n c~n co truac khi ch~y
VD: var fs =require(lfsl); II Yeu c~u thu vi~n fs
require.resolveO
Trang 38Chuang 1/GiIJi thi?u t6ng quan vJNodejs
Tim vi tri cua mQtth7 vi~n va tni ve dUOngd~n den thu vi~n do
require.cache
Thu vi~n duqc luu tru tl;lmtrong object nay
require.extensions
Thay d6i duoi file m~c dinh rna I~nh require se tim kiem
M~c dinh co 3 duoi file h6trq la js, json , node
DuOng d~n den file code duqc thl,lcthi
VD: Neu chl;lYnode example.js tir /Users/abc thi
console.logLfilename);/1 Xu~t ra /Users/abc/example.js
dirname
Duong d~n den thu ml)c code duqc thl,lcthi
VD: Neu chl;lYnode example.js tir /Users/abc thi
console.logLdirname);11 Xu~t ra /Users/abc
module
Cung c~p thong tin ve cac cai d~t cho nQi dung code dang xu Iy nhu duongd~n, cac thu vi~n co s~n,
exports
Trang 39Chuang 1/ Giiri thi?u t6ng quan vJ Nodejs 43
Tuong t¥ nhu object module.exports, dung d~ luu tni external property d~ c6th~ duqc truy xu~t b~ng reguireOanhfrng file code khcic
1.5.2.4/ Cac Global Object khac
setTimeout(cb, ms)
G9i ham cb (callback) sau ms (milisecond) nh~t dinh Trong d6 Node.js guydinh ms phai n~m trong khoang 1-2147483647 milisecond tilc t6i da la 24.8ngay N~u truy~n ms sai se chuy~n ms v~ 1
Tnl v~ mQtobject d~ truy~n van clearTimeout(t)
Tni v~ mQtobject d~ truy~n van clearlnterval(t)
Trang 40ChU011g1/Gi6'i thi?u t6ng quan v~Node.js
1.5.3/ Cac thu vi~n h8 trg co s~n
1.5.3.11Thu vi~n h8 trg HTTP Server
Cung c~p m<)t b<) danh sach t~t ca cac rna tr':1ng thai tieu chu~n cua HTTP
http.createServer ([requestListener])
Tra v~ m<)td6i tuqng web server maioRequestListener la m<)tchilc nang duQ'ctv' d<)ng them vao SlJ ki~n 'request'
http.createClient ([port), [host])
T':1o d6i tuqng HTTP client maio Port va host tham chiSu dSn may chu dSduQ'c kSt n6i (Ham nay hi~n khong con khuySn khich su dVng) , Thay thSb~ng http.requestO
a L6'p: http.Server
server.listen(port, [hostname), [backlog), [callbackV