{"id":44790,"date":"2023-12-04T09:59:03","date_gmt":"2023-12-04T02:59:03","guid":{"rendered":"https:\/\/itviec.com\/blog\/?p=44790"},"modified":"2024-09-29T22:44:35","modified_gmt":"2024-09-29T15:44:35","slug":"nodejs-la-gi","status":"publish","type":"post","link":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/","title":{"rendered":"NodeJS l\u00e0 g\u00ec: T\u1ed5ng quan ki\u1ebfn th\u1ee9c NodeJS v\u00e0 Top 5 NodeJS framework"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed9i dung b\u00e0i vi\u1ebft<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#Gioi_thieu_NodeJS_la_gi\" >Gi\u1edbi thi\u1ec7u NodeJS l\u00e0 g\u00ec<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#Cac_thuat_ngu_lien_quan_den_NodeJS\" >C\u00e1c thu\u1eadt ng\u1eef li\u00ean quan \u0111\u1ebfn NodeJS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#Tinh_chat_cua_NodeJS\" >T\u00ednh ch\u1ea5t c\u1ee7a NodeJS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#Uu_diem_cua_NodeJS\" >\u01afu \u0111i\u1ec3m c\u1ee7a NodeJS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#Thanh_phan_cua_NodeJS\" >Th\u00e0nh ph\u1ea7n c\u1ee7a NodeJS\u00a0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#Top_5_NodeJS_framework_danh_cho_nguoi_moi_bat_dau\" >Top 5 NodeJS framework d\u00e0nh cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#NodeJS_phu_hop_voi_nhung_ung_dung_nao\" >NodeJS ph\u00f9 h\u1ee3p v\u1edbi nh\u1eefng \u1ee9ng d\u1ee5ng n\u00e0o?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#Tai_lieu_hoc_NodeJS_danh_cho_nguoi_moi_bat_dau\" >T\u00e0i li\u1ec7u h\u1ecdc NodeJS d\u00e0nh cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#Cac_cau_hoi_thuong_gap_ve_NodeJS\" >C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 NodeJS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#Tong_ket_NodeJS_la_gi\" >T\u1ed5ng k\u1ebft NodeJS l\u00e0 g\u00ec<\/a><\/li><\/ul><\/nav><\/div>\n<p><b><i>NodeJS, hay c\u00f2n vi\u1ebft l\u00e0 Node.js, l\u00e0 m\u1ed9t y\u1ebfu t\u1ed1 then ch\u1ed1t trong l\u1eadp tr\u00ecnh web hi\u1ec7n \u0111\u1ea1i, thay \u0111\u1ed5i c\u00e1ch ch\u00fang ta x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng ph\u00eda m\u00e1y ch\u1ee7 b\u1eb1ng JavaScript. Cho d\u00f9 b\u1ea1n l\u00e0 l\u1eadp tr\u00ecnh vi\u00ean d\u00e0y d\u1eb7n kinh nghi\u1ec7m hay ng\u01b0\u1eddi m\u1edbi b\u01b0\u1edbc v\u00e0o l\u1eadp tr\u00ecnh, nh\u1eefng ki\u1ebfn th\u1ee9c n\u1ec1n t\u1ea3ng v\u1ec1 NodeJS s\u1ebd lu\u00f4n l\u00e0 nh\u1eefng \u0111i\u1ec1u c\u1ea7n thi\u1ebft \u0111\u1ec3 c\u00f3 th\u1ec3 t\u1ed1i \u01b0u hi\u1ec7u qu\u1ea3 khi l\u00e0m vi\u1ec7c.<\/i><\/b><\/p>\n<p><span style=\"font-weight: 400;\">Trong b\u00e0i vi\u1ebft n\u00e0y, b\u1ea1n s\u1ebd t\u00ecm hi\u1ec3u v\u1ec1 NodeJS qua nh\u1eefng kh\u00eda c\u1ea1nh:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">NodeJS l\u00e0 g\u00ec? C\u00e1c thu\u1eadt ng\u1eef n\u00ean bi\u1ebft v\u1ec1 NodeJS<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">T\u00ednh ch\u1ea5t c\u1ee7a NodeJS<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Top 5 NodeJS Framework b\u1ea1n n\u00ean t\u00ecm hi\u1ec3u<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">T\u00e0i li\u1ec7u h\u1ecdc t\u1eadp d\u00e0nh cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u ti\u1ebfp c\u1eadn NodeJS<\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Gioi_thieu_NodeJS_la_gi\"><\/span><b>Gi\u1edbi thi\u1ec7u NodeJS l\u00e0 g\u00ec<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">\u0110\u01b0\u1ee3c ph\u00e1t h\u00e0nh v\u00e0o n\u0103m 2009, NodeJS, hay c\u00f2n \u0111\u01b0\u1ee3c bi\u1ebft v\u1edbi t\u00ean g\u1ecdi ch\u00ednh th\u1ee9c l\u00e0 Node.js, l\u00e0 m\u00f4i tr\u01b0\u1eddng th\u1eddi gian ch\u1ea1y (runtime environment) JavaScript \u0111a n\u1ec1n t\u1ea3ng v\u00e0 m\u00e3 ngu\u1ed3n m\u1edf. NodeJS cho ph\u00e9p c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean t\u1ea1o c\u1ea3 \u1ee9ng d\u1ee5ng front-end v\u00e0 back-end b\u1eb1ng <a href=\"https:\/\/itviec.com\/blog\/javascript-la-gi\/\" target=\"_blank\" rel=\"noopener\"><strong>JavaScript<\/strong><\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0110i\u1ec1u n\u00e0y nghe c\u00f3 v\u1ebb v\u1eeba \u0111\u01a1n gi\u1ea3n v\u1eeba th\u00fa v\u1ecb. Nh\u01b0ng \u0111\u1ed1i v\u1edbi ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u, \u0111\u1ecbnh ngh\u0129a n\u00e0y c\u00f3 th\u1ec3 v\u1eabn c\u00f2n ch\u01b0a r\u00f5 r\u00e0ng. V\u00ec v\u1eady, h\u00e3y chia nh\u1ecf \u0111\u1ecbnh ngh\u0129a n\u00e0y \u0111\u1ec3 hi\u1ec3u r\u00f5 \u00fd ngh\u0129a c\u1ee7a NodeJS.<\/span><\/p>\n<h3><b>NodeJS l\u00e0 m\u00e3 ngu\u1ed3n m\u1edf<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">\u0110i\u1ec1u n\u00e0y c\u00f3 ngh\u0129a l\u00e0 m\u00e3 ngu\u1ed3n c\u1ee7a NodeJS \u0111\u01b0\u1ee3c cung c\u1ea5p c\u00f4ng khai. V\u00e0 \u0111\u01b0\u1ee3c duy tr\u00ec b\u1edfi nh\u1eefng ng\u01b0\u1eddi \u0111\u00f3ng g\u00f3p t\u1eeb kh\u1eafp n\u01a1i tr\u00ean th\u1ebf gi\u1edbi.<\/span><\/p>\n<h3><b>NodeJS h\u1ed7 tr\u1ee3 \u0111a n\u1ec1n t\u1ea3ng<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS kh\u00f4ng ph\u1ee5 thu\u1ed9c v\u00e0o b\u1ea5t k\u1ef3 ph\u1ea7n m\u1ec1m h\u1ec7 \u0111i\u1ec1u h\u00e0nh n\u00e0o m\u00e0 \u0111\u1ec1u c\u00f3 th\u1ec3 ho\u1ea1t \u0111\u1ed9ng tr\u00ean Linux, macOS ho\u1eb7c Windows.<\/span><\/p>\n<h3><b>NodeJS l\u00e0 m\u00f4i tr\u01b0\u1eddng th\u1eddi gian ch\u1ea1y m\u00e3 JavaScript<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Khi b\u1ea1n vi\u1ebft code JavaScript trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n, code \u0111\u00f3 kh\u00f4ng th\u1ec3 th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 t\u00e1c v\u1ee5 n\u00e0o tr\u1eeb khi b\u1ea1n th\u1ef1c thi (ho\u1eb7c ch\u1ea1y) n\u00f3. V\u00e0 \u0111\u1ec3 ch\u1ea1y code, b\u1ea1n c\u1ea7n c\u00f3 m\u00f4i tr\u01b0\u1eddng th\u1eddi gian ch\u1ea1y.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u00e1c tr\u00ecnh duy\u1ec7t nh\u01b0 Chrome v\u00e0 Firefox c\u00f3 m\u00f4i tr\u01b0\u1eddng th\u1eddi gian ch\u1ea1y. \u0110\u00f3 l\u00e0 l\u00fd do t\u1ea1i sao h\u1ecd c\u00f3 th\u1ec3 ch\u1ea1y code JavaScript. Tr\u01b0\u1edbc khi NodeJS \u0111\u01b0\u1ee3c t\u1ea1o, JavaScript ch\u1ec9 c\u00f3 th\u1ec3 ch\u1ea1y tr\u00ean tr\u00ecnh duy\u1ec7t v\u00e0 ch\u1ec9 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng front-end.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">NodeJS cung c\u1ea5p m\u00f4i tr\u01b0\u1eddng th\u1eddi gian ch\u1ea1y b\u00ean ngo\u00e0i tr\u00ecnh duy\u1ec7t. N\u00f3 c\u0169ng \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng tr\u00ean c\u00f4ng c\u1ee5 JavaScript c\u1ee7a Chrome (V8 Engine). \u0110i\u1ec1u n\u00e0y gi\u00fap b\u1ea1n c\u00f3 th\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng back-end b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00f9ng ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh JavaScript m\u00e0 b\u1ea1n quen thu\u1ed9c.<\/span><\/p>\n<blockquote><p><em>Tham kh\u1ea3o: <a href=\"https:\/\/itviec.com\/blog\/nodejs-backend-la-gi\/\" target=\"_blank\" rel=\"noopener\"><strong>NodeJS Backend: Khi n\u00e0o n\u00ean s\u1eed d\u1ee5ng NodeJS l\u1eadp tr\u00ecnh backend?<\/strong><\/a><\/em><\/p><\/blockquote>\n<h2><span class=\"ez-toc-section\" id=\"Cac_thuat_ngu_lien_quan_den_NodeJS\"><\/span><b>C\u00e1c thu\u1eadt ng\u1eef li\u00ean quan \u0111\u1ebfn NodeJS<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><b>I\/O (input\/output)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">L\u00e0 vi\u1ebft t\u1eaft c\u1ee7a input\/output, thu\u1eadt ng\u1eef I\/O ch\u1ee7 y\u1ebfu \u0111\u1ec1 c\u1eadp \u0111\u1ebfn s\u1ef1 t\u01b0\u01a1ng t\u00e1c c\u1ee7a ch\u01b0\u01a1ng tr\u00ecnh v\u1edbi h\u1ec7 th\u1ed1ng.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">V\u00ed d\u1ee5: C\u00e1c ho\u1ea1t \u0111\u1ed9ng I\/O c\u00f3 th\u1ec3 bao g\u1ed3m vi\u1ec7c \u0111\u1ecdc\/ ghi d\u1eef li\u1ec7u t\u1eeb\/ v\u00e0o disk, t\u1ea1o c\u00e1c y\u00eau c\u1ea7u HTTP v\u00e0 trao \u0111\u1ed5i v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u. Ho\u1ea1t \u0111\u1ed9ng n\u00e0y r\u1ea5t ch\u1eadm so v\u1edbi vi\u1ec7c truy c\u1eadp b\u1ed9 nh\u1edb (RAM) ho\u1eb7c th\u1ef1c hi\u1ec7n c\u00f4ng vi\u1ec7c tr\u1ef1c ti\u1ebfp tr\u00ean CPU.<\/span><\/p>\n<h3><b>Kh\u00f4ng \u0111\u1ed3ng b\u1ed9 (Asynchronous)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Th\u1ef1c thi kh\u00f4ng \u0111\u1ed3ng b\u1ed9 \u0111\u1ec1 c\u1eadp \u0111\u1ebfn c\u00e1ch th\u1ef1c thi kh\u00f4ng theo tr\u00ecnh t\u1ef1 xu\u1ea5t hi\u1ec7n trong code. Trong l\u1eadp tr\u00ecnh kh\u00f4ng \u0111\u1ed3ng b\u1ed9, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd kh\u00f4ng \u0111\u1ee3i t\u00e1c v\u1ee5 ho\u00e0n th\u00e0nh m\u00e0 \u0111\u00e3 c\u00f3 th\u1ec3 chuy\u1ec3n sang t\u00e1c v\u1ee5 ti\u1ebfp theo.<\/span><\/p>\n<h3><b>Kh\u00f4ng ch\u1eb7n (Non-blocking)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Ch\u1eb7n (blocking) \u0111\u1ec1 c\u1eadp \u0111\u1ebfn h\u00e0nh \u0111\u1ed9ng ch\u1eb7n vi\u1ec7c th\u1ef1c thi ti\u1ebfp theo cho \u0111\u1ebfn khi t\u00e1c v\u1ee5 \u0111\u00f3 k\u1ebft th\u00fac trong khi kh\u00f4ng ch\u1eb7n (non-blocking) \u0111\u1ec1 c\u1eadp \u0111\u1ebfn h\u00e0nh \u0111\u1ed9ng kh\u00f4ng ch\u1eb7n vi\u1ec7c th\u1ef1c thi.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">K\u1ebft h\u1ee3p v\u1edbi thu\u1eadt ng\u1eef \u201ckh\u00f4ng \u0111\u1ed3ng b\u1ed9&#8221; \u1edf tr\u00ean, b\u1ea1n c\u00f3 th\u1ec3 hi\u1ec3u r\u1eb1ng c\u00e1c ph\u01b0\u01a1ng th\u1ee9c non-blocking di\u1ec5n ra m\u1ed9t c\u00e1ch kh\u00f4ng \u0111\u1ed3ng b\u1ed9.<\/span><\/p>\n<h3><b>S\u1ef1 ki\u1ec7n (Event) v\u00e0 L\u1eadp tr\u00ecnh H\u01b0\u1edbng s\u1ef1 ki\u1ec7n (Event-driven programming)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">S\u1ef1 ki\u1ec7n l\u00e0 c\u00e1c h\u00e0nh \u0111\u1ed9ng do ng\u01b0\u1eddi d\u00f9ng ho\u1eb7c h\u1ec7 th\u1ed1ng t\u1ea1o ra, nh\u01b0 nh\u1ea5p chu\u1ed9t, t\u1ea3i xu\u1ed1ng t\u1ec7p ho\u00e0n t\u1ea5t ho\u1eb7c l\u1ed7i ph\u1ea7n c\u1ee9ng ho\u1eb7c ph\u1ea7n m\u1ec1m.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">L\u1eadp tr\u00ecnh h\u01b0\u1edbng s\u1ef1 ki\u1ec7n l\u00e0 m\u1ed9t m\u00f4 h\u00ecnh l\u1eadp tr\u00ecnh trong \u0111\u00f3 lu\u1ed3ng ch\u01b0\u01a1ng tr\u00ecnh \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh b\u1edfi c\u00e1c s\u1ef1 ki\u1ec7n. M\u1ed9t ch\u01b0\u01a1ng tr\u00ecnh h\u01b0\u1edbng s\u1ef1 ki\u1ec7n s\u1ebd th\u1ef1c hi\u1ec7n c\u00e1c h\u00e0nh \u0111\u1ed9ng \u0111\u1ec3 \u0111\u00e1p l\u1ea1i c\u00e1c s\u1ef1 ki\u1ec7n. M\u1ed9t s\u1ef1 ki\u1ec7n x\u1ea3y ra s\u1ebd k\u00edch ho\u1ea1t h\u00e0m callback.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">V\u1eady th\u00ec nh\u1eefng thu\u1eadt ng\u1eef tr\u00ean li\u00ean quan nh\u01b0 th\u1ebf n\u00e0o \u0111\u1ebfn NodeJS? H\u00e3y c\u00f9ng \u0111\u1ecdc ti\u1ebfp ph\u1ea7n ti\u1ebfp theo v\u1ec1 t\u00ednh ch\u1ea5t c\u1ee7a NodeJS nh\u00e9!<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Tinh_chat_cua_NodeJS\"><\/span><b>T\u00ednh ch\u1ea5t c\u1ee7a NodeJS<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><b>Kh\u00f4ng \u0111\u1ed3ng b\u1ed9 v\u1ec1 b\u1ea3n ch\u1ea5t v\u00e0 H\u01b0\u1edbng s\u1ef1 ki\u1ec7n (Asynchronous in<\/b> <b>Nature and Event-driven)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">C\u00e1c m\u00e1y ch\u1ee7 \u0111\u01b0\u1ee3c t\u1ea1o b\u1eb1ng NodeJS kh\u00f4ng bao gi\u1edd ch\u1edd \u0111\u1ee3i d\u1eef li\u1ec7u t\u1eeb m\u1ed9t <a href=\"https:\/\/itviec.com\/blog\/api-la-gi\/\" target=\"_blank\" rel=\"noopener\">API<\/a> c\u1ee5 th\u1ec3, thay v\u00e0o \u0111\u00f3, n\u00f3 s\u1ebd chuy\u1ec3n tr\u1ef1c ti\u1ebfp sang API ti\u1ebfp theo.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0110\u1ec3 nh\u1eadn v\u00e0 theo d\u00f5i t\u1ea5t c\u1ea3 ph\u1ea3n h\u1ed3i c\u1ee7a c\u00e1c y\u00eau c\u1ea7u API tr\u01b0\u1edbc \u0111\u00f3, NodeJS tu\u00e2n theo c\u01a1 ch\u1ebf h\u01b0\u1edbng s\u1ef1 ki\u1ec7n. Do \u0111\u00f3, ch\u00fang ta c\u00f3 th\u1ec3 n\u00f3i r\u1eb1ng v\u1ec1 b\u1ea3n ch\u1ea5t t\u1ea5t c\u1ea3 c\u00e1c API c\u1ee7a NodeJS \u0111\u1ec1u kh\u00f4ng b\u1ecb ch\u1eb7n (non-blocking).<\/span><\/p>\n<h3><b>Ki\u1ebfn tr\u00fac \u0111\u01a1n lu\u1ed3ng (Single Threaded Architecture)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS ho\u1ea1t \u0111\u1ed9ng tr\u00ean m\u1ed9t lu\u1ed3ng duy nh\u1ea5t.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">D\u1ef1a tr\u00ean ki\u1ebfn tr\u00fac \u201cM\u00f4 h\u00ecnh v\u00f2ng l\u1eb7p s\u1ef1 ki\u1ec7n \u0111\u01a1n lu\u1ed3ng\u201d (Single Threaded Event Loop Model), NodeJS c\u00f3 th\u1ec3 x\u1eed l\u00fd nhi\u1ec1u y\u00eau c\u1ea7u c\u1ee7a m\u00e1y kh\u00e1ch.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">V\u00f2ng l\u1eb7p s\u1ef1 ki\u1ec7n \u0111\u01b0\u1ee3c th\u1ef1c thi tr\u00ean m\u1ed9t lu\u1ed3ng ch\u00ednh duy nh\u1ea5t. V\u00f2ng l\u1eb7p s\u1ef1 ki\u1ec7n cho ph\u00e9p NodeJS th\u1ef1c hi\u1ec7n t\u1ea5t c\u1ea3 c\u00e1c ho\u1ea1t \u0111\u1ed9ng I\/O kh\u00f4ng ch\u1eb7n m\u1eb7c d\u00f9 JavaScript l\u00e0 \u0111\u01a1n lu\u1ed3ng.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Uu_diem_cua_NodeJS\"><\/span><b>\u01afu \u0111i\u1ec3m c\u1ee7a NodeJS<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><b>NodeJS c\u00f3 th\u1ec3 m\u1edf r\u1ed9ng<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">C\u00e1c \u1ee9ng d\u1ee5ng NodeJS c\u00f3 kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng cao v\u00ec ch\u00fang ho\u1ea1t \u0111\u1ed9ng kh\u00f4ng \u0111\u1ed3ng b\u1ed9 v\u00ec c\u00e1c y\u00eau c\u1ea7u \u0111\u1ed3ng th\u1eddi c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c x\u1eed l\u00fd r\u1ea5t hi\u1ec7u qu\u1ea3 b\u1eb1ng NodeJS.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">NodeJS ho\u1ea1t \u0111\u1ed9ng tr\u00ean m\u1ed9t lu\u1ed3ng \u0111\u01a1n n\u00ean khi c\u00f3 m\u1ed9t y\u00eau c\u1ea7u \u0111\u1ebfn, NodeJS s\u1ebd b\u1eaft \u0111\u1ea7u x\u1eed l\u00fd y\u00eau c\u1ea7u \u0111\u00f3 v\u00e0 s\u1eb5n s\u00e0ng x\u1eed l\u00fd y\u00eau c\u1ea7u ti\u1ebfp theo.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">T\u00ednh n\u0103ng h\u1ea5p d\u1eabn nh\u1ea5t c\u1ee7a NodeJS l\u00e0 kh\u1ea3 n\u0103ng ph\u00e2n v\u00f9ng c\u00e1c \u1ee9ng d\u1ee5ng theo chi\u1ec1u ngang v\u00e0 quy tr\u00ecnh ph\u00e2n v\u00f9ng n\u00e0y ch\u1ee7 y\u1ebfu \u0111\u1ea1t \u0111\u01b0\u1ee3c nh\u1edd s\u1eed d\u1ee5ng c\u00e1c ti\u1ebfn tr\u00ecnh con. B\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng t\u00ednh n\u0103ng n\u00e0y, c\u00e1c phi\u00ean b\u1ea3n \u1ee9ng d\u1ee5ng ri\u00eang bi\u1ec7t \u0111\u01b0\u1ee3c cung c\u1ea5p cho c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng m\u1ee5c ti\u00eau kh\u00e1c nhau v\u00e0 cho ph\u00e9p ch\u00fang \u0111\u00e1p \u1ee9ng s\u1edf th\u00edch c\u1ee7a kh\u00e1ch h\u00e0ng.<\/span><\/p>\n<h3><b>Th\u1eddi gian th\u1ef1c thi code nhanh<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">C\u00f4ng c\u1ee5 th\u1eddi gian ch\u1ea1y (runtime motor) JavaScript V8 \u0111\u01b0\u1ee3c NodeJS s\u1eed d\u1ee5ng v\u00e0 c\u0169ng \u0111\u01b0\u1ee3c Google Chrome s\u1eed d\u1ee5ng. M\u1ed9t tr\u00ecnh bao b\u1ecdc \u0111\u01b0\u1ee3c trung t\u00e2m cung c\u1ea5p cho JavaScript v\u00e0 v\u00ec l\u00fd do \u0111\u00f3, c\u00f4ng c\u1ee5 th\u1eddi gian ch\u1ea1y tr\u1edf n\u00ean nhanh h\u01a1n.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u00f4ng c\u1ee5 JavaScript V8 c\u1ee7a Google Chrome l\u00e0 n\u1ec1n t\u1ea3ng c\u1ee7a NodeJS, cho ph\u00e9p th\u1ef1c thi m\u00e3 nhanh h\u01a1n. C\u00f4ng c\u1ee5 n\u00e0y bi\u00ean d\u1ecbch code JavaScript th\u00e0nh code m\u00e1y, gi\u00fap code \u0111\u01b0\u1ee3c tri\u1ec3n khai hi\u1ec7u qu\u1ea3 v\u00e0 d\u1ec5 d\u00e0ng h\u01a1n v\u00e0 nhanh h\u01a1n.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0110\u1ed3ng th\u1eddi, vi\u1ec7c s\u1eed d\u1ee5ng c\u00e1c kh\u00e1i ni\u1ec7m nh\u01b0 l\u1eadp tr\u00ecnh kh\u00f4ng \u0111\u1ed3ng b\u1ed9 v\u00e0 c\u00e1ch v\u1eadn h\u00e0nh non-blocking tr\u00ean c\u00e1c ho\u1ea1t \u0111\u1ed9ng I\/O c\u0169ng gi\u00fap n\u00e2ng cao hi\u1ec7u su\u1ea5t c\u1ee7a NodeJS.<\/span><\/p>\n<h3><b>Kh\u1ea3 n\u0103ng t\u01b0\u01a1ng th\u00edch tr\u00ean nhi\u1ec1u n\u1ec1n t\u1ea3ng<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">C\u00e1c lo\u1ea1i h\u1ec7 \u0111i\u1ec1u h\u00e0nh kh\u00e1c nhau nh\u01b0 Windows, UNIX, <a href=\"https:\/\/itviec.com\/blog\/linux\/\" target=\"_blank\" rel=\"noopener\">LINUX<\/a>, MacOS v\u00e0 c\u00e1c thi\u1ebft b\u1ecb di \u0111\u1ed9ng kh\u00e1c \u0111\u1ec1u c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng NodeJS.<\/span><\/p>\n<h3><b>S\u1eed d\u1ee5ng JavaScript<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS s\u1eed d\u1ee5ng JavaScript. H\u1ea7u h\u1ebft c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean \u0111\u1ec1u quen thu\u1ed9c v\u1edbi JavaScript, v\u00ec v\u1eady \u0111\u1ed1i v\u1edbi h\u1ecd, vi\u1ec7c hi\u1ec3u NodeJS tr\u1edf n\u00ean r\u1ea5t d\u1ec5 d\u00e0ng h\u01a1n.<\/span><\/p>\n<h3><b>Truy\u1ec1n d\u1eef li\u1ec7u nhanh<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Th\u1eddi gian x\u1eed l\u00fd nh\u1eefng d\u1eef li\u1ec7u \u0111\u00e3 \u0111\u01b0\u1ee3c truy\u1ec1n \u0111\u1ebfn c\u00e1c lu\u1ed3ng kh\u00e1c nhau th\u01b0\u1eddng s\u1ebd m\u1ea5t nhi\u1ec1u th\u1eddi gian. Trong khi \u0111\u00f3, \u0111\u1ec3 x\u1eed l\u00fd d\u1eef li\u1ec7u, NodeJS ch\u1ec9 m\u1ea5t m\u1ed9t kho\u1ea3ng th\u1eddi gian r\u1ea5t ng\u1eafn v\u00e0 th\u1ef1c hi\u1ec7n v\u1edbi t\u1ed1c \u0111\u1ed9 nhanh.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">NodeJS ti\u1ebft ki\u1ec7m r\u1ea5t nhi\u1ec1u th\u1eddi gian v\u00ec c\u00e1c t\u1ec7p \u0111\u01b0\u1ee3c NodeJS x\u1eed l\u00fd v\u00e0 t\u1ea3i l\u00ean \u0111\u1ed3ng th\u1eddi. Do \u0111\u00f3, t\u1ed1c \u0111\u1ed9 t\u1ed5ng th\u1ec3 c\u1ee7a truy\u1ec1n d\u1eef li\u1ec7u v\u00e0 video \u0111\u01b0\u1ee3c c\u1ea3i thi\u1ec7n nh\u1edd NodeJS.<\/span><\/p>\n<h3><b>Kh\u00f4ng c\u00f3 b\u1ed9 \u0111\u1ec7m<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">D\u1eef li\u1ec7u kh\u00f4ng bao gi\u1edd \u0111\u01b0\u1ee3c l\u01b0u v\u00e0o b\u1ed9 \u0111\u1ec7m trong \u1ee9ng d\u1ee5ng NodeJS.<\/span><\/p>\n<h3><b>Ti\u1ebft ki\u1ec7m th\u1eddi gian, c\u00f4ng s\u1ee9c v\u00e0 chi ph\u00ed<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS \u0111\u01b0\u1ee3c trang b\u1ecb m\u1ed9t kho th\u01b0 vi\u1ec7n kh\u1ed5ng l\u1ed3 \u2013 NPM (<\/span><span style=\"font-weight: 400;\">Node Package Manager<\/span><span style=\"font-weight: 400;\">). C\u00e1c developer c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng l\u1ea1i c\u00e1c module trong code v\u00e0 \u0111\u01b0a c\u00e1c ch\u1ee9c n\u0103ng \u0111a d\u1ea1ng v\u00e0o b\u1ea5t k\u1ef3 \u1ee9ng d\u1ee5ng n\u00e0o.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Kho l\u01b0u tr\u1eef ngu\u1ed3n m\u1edf n\u00e0y gi\u00fap gi\u1ea3m \u0111\u00e1ng k\u1ec3 chi ph\u00ed v\u00e0 n\u1ed7 l\u1ef1c ph\u00e1t tri\u1ec3n, \u0111\u1ed3ng th\u1eddi c\u0169ng r\u00fat ng\u1eafn th\u1eddi gian tri\u1ec3n khai v\u00e0 th\u00fac \u0111\u1ea9y c\u00e1c gi\u1ea3i ph\u00e1p \u0111\u1ed5i m\u1edbi.<\/span><\/p>\n<h3><b>M\u1ed9t ng\u00f4n ng\u1eef<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">M\u1ed9t trong nh\u1eefng l\u1ee3i \u00edch ch\u00ednh c\u1ee7a NodeJS l\u00e0 kh\u1ea3 n\u0103ng vi\u1ebft to\u00e0n b\u1ed9 c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u1ee7a b\u1ea5t k\u1ef3 \u1ee9ng d\u1ee5ng web n\u00e0o ch\u1ec9 b\u1eb1ng m\u1ed9t ng\u00f4n ng\u1eef &#8211; JavaScript. Do \u0111\u00f3, l\u1eadp tr\u00ecnh vi\u00ean kh\u00f4ng c\u1ea7n t\u1ed1n nhi\u1ec1u th\u1eddi gian h\u1ecdc c\u00e1c ng\u00f4n ng\u1eef kh\u00e1c nhau \u0111\u1ec3 \u0111\u00e1p \u1ee9ng.<\/span><\/p>\n<h3><b>H\u1ed7 tr\u1ee3 c\u1ed9ng \u0111\u1ed3ng m\u1ea1nh m\u1ebd<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS c\u00f3 s\u1ef1 h\u1ed7 tr\u1ee3 c\u1ed9ng \u0111\u1ed3ng v\u00e0 h\u1ed7 tr\u1ee3 m\u1ea1nh m\u1ebd v\u00ec l\u00e0 m\u00e3 ngu\u1ed3n m\u1edf. V\u00ec v\u1eady, c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n c\u00f3 th\u1ec3 t\u00ecm ki\u1ebfm s\u1ef1 tr\u1ee3 gi\u00fap t\u1eeb c\u00e1c chuy\u00ean gia t\u1eeb kh\u1eafp n\u01a1i tr\u00ean th\u1ebf gi\u1edbi. \u0110i\u1ec1u n\u00e0y th\u00fac \u0111\u1ea9y c\u00e1c d\u1ef1 \u00e1n ph\u00e1t tri\u1ec3n.<\/span><\/p>\n<blockquote><p><em>Tham kh\u1ea3o <a href=\"https:\/\/itviec.com\/viec-lam-it\/nodejs?utm_medium=anchor_text_mid&amp;utm_source=blog&amp;utm_campaign=viec_lam_nodejs&amp;utm_content=nodejs_la_gi\" target=\"_blank\" rel=\"noopener\"><strong>Vi\u1ec7c l\u00e0m NodeJS<\/strong><\/a> tr\u00ean ITviec<\/em><\/p><\/blockquote>\n<h2><span class=\"ez-toc-section\" id=\"Thanh_phan_cua_NodeJS\"><\/span><b>Th\u00e0nh ph\u1ea7n c\u1ee7a NodeJS\u00a0<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><b>Module<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">C\u00e1c module gi\u1ed1ng nh\u01b0 c\u00e1c th\u01b0 vi\u1ec7n JavaScript c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong \u1ee9ng d\u1ee5ng NodeJS \u0111\u1ec3 bao g\u1ed3m m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c h\u00e0m.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0110\u1ec3 \u0111\u01b0a m\u1ed9t module v\u00e0o \u1ee9ng d\u1ee5ng NodeJS, h\u00e3y s\u1eed d\u1ee5ng h\u00e0m require() v\u1edbi d\u1ea5u ngo\u1eb7c \u0111\u01a1n ch\u1ee9a t\u00ean c\u1ee7a module.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">NodeJS c\u00f3 nhi\u1ec1u module cung c\u1ea5p ch\u1ee9c n\u0103ng c\u01a1 b\u1ea3n c\u1ea7n thi\u1ebft cho m\u1ed9t \u1ee9ng d\u1ee5ng web. M\u1ed9t s\u1ed1 trong s\u1ed1 \u0111\u00f3 \u0111\u01b0\u1ee3c \u0111\u1ec1 c\u1eadp trong b\u1ea3ng n\u00e0y:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Module ch\u00ednh<\/b><\/td>\n<td><b>M\u00f4 t\u1ea3<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">http<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Bao g\u1ed3m class, method v\u00e0 event \u0111\u1ec3 t\u1ea1o m\u00e1y ch\u1ee7 NodeJS http<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">util<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Bao g\u1ed3m c\u00e1c h\u00e0m h\u1eefu d\u1ee5ng cho l\u1eadp tr\u00ecnh vi\u00ean<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">fs<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Bao g\u1ed3m c\u00e1c s\u1ef1 ki\u1ec7n, class, v\u00e0 ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ec3 x\u1eed l\u00fd file v\u1eadn h\u00e0nh I\/O<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">url<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Bao g\u1ed3m nh\u1eefng ph\u01b0\u01a1ng th\u1ee9c ph\u00e2n t\u00edch c\u00fa ph\u00e1p URL<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">querystring<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Bao g\u1ed3m nh\u1eefng ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ec3 l\u00e0m vi\u1ec7c v\u1edbi query string<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">stream<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Bao g\u1ed3m nh\u1eefng ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ec3 x\u1eed l\u00fd c\u00e1c lu\u1ed3ng d\u1eef li\u1ec7u<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">zlib<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Bao g\u1ed3m nh\u1eefng ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ec3 n\u00e9n ho\u1eb7c gi\u1ea3i n\u00e9n file<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center;\"><em><span style=\"font-weight: 400;\">C\u00e1c module trong NodeJS<\/span><\/em><\/p>\n<h3><b>B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n (Console)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">B\u1ea3ng \u0111i\u1ec1u khi\u1ec3n l\u00e0 m\u1ed9t module cung c\u1ea5p ph\u01b0\u01a1ng ph\u00e1p g\u1ee1 l\u1ed7i t\u01b0\u01a1ng t\u1ef1 nh\u01b0 b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n JavaScript c\u01a1 b\u1ea3n do tr\u00ecnh duy\u1ec7t cung c\u1ea5p. N\u00f3 print tin nh\u1eafn t\u1edbi thi\u1ebft b\u1ecb stdout and stderr.<\/span><\/p>\n<pre>\/\/Vi\u1ebft \"hello world\" \u0111\u1ebfn console\r\nconsole.log('hello world');<\/pre>\n<h3><b>C\u1ee5m (Cluster)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng d\u1ef1a tr\u00ean kh\u00e1i ni\u1ec7m l\u1eadp tr\u00ecnh \u0111\u01a1n lu\u1ed3ng. C\u1ee5m l\u00e0 m\u1ed9t module cho ph\u00e9p th\u1ef1c hi\u1ec7n \u0111a lu\u1ed3ng b\u1eb1ng c\u00e1ch t\u1ea1o c\u00e1c ti\u1ebfn tr\u00ecnh con chia s\u1ebb c\u00f9ng m\u1ed9t c\u1ed5ng m\u00e1y ch\u1ee7 v\u00e0 ch\u1ea1y \u0111\u1ed3ng th\u1eddi.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">M\u1ed9t c\u1ee5m c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o m\u1ed9t \u1ee9ng d\u1ee5ng theo c\u00e1ch sau:<\/span><\/p>\n<pre>\/\/Bao g\u1ed3m module c\u1ee5m trong \u1ee9ng d\u1ee5ng\r\nvar cluster = require('clustr');\r\n\r\nif (cluster.isWorker) {\r\n   console.log('Child thread');\r\n} else {\r\n   console.log('Parent thread');\r\n   cluster.fork();\r\n   cluster.fork();\r\n}<\/pre>\n<h3><b>\u0110\u1ed1i t\u01b0\u1ee3ng to\u00e0n c\u1ee5c (Global)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">C\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng to\u00e0n c\u1ee5c trong NodeJS c\u00f3 s\u1eb5n trong t\u1ea5t c\u1ea3 c\u00e1c module. C\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y l\u00e0 c\u00e1c h\u00e0m, module, chu\u1ed7i, v.v. M\u1ed9t s\u1ed1 \u0111\u1ed1i t\u01b0\u1ee3ng to\u00e0n c\u1ee5c c\u1ee7a NodeJS \u0111\u01b0\u1ee3c \u0111\u1ec1 c\u1eadp trong b\u1ea3ng b\u00ean d\u01b0\u1edbi:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>\u0110\u1ed1i t\u01b0\u1ee3ng to\u00e0n c\u1ee5c<\/b><\/td>\n<td><b>M\u00f4 t\u1ea3<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">___dirname<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Ch\u1ec9 \u0111\u1ecbnh t\u00ean c\u00e1c th\u01b0 m\u1ee5c ch\u1ee9a code<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">___filename<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Ch\u1ec9 \u0111\u1ecbnh t\u00ean file ch\u1ee9a code<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">exports<\/span><\/td>\n<td><span style=\"font-weight: 400;\">L\u00e0 tr\u00edch d\u1eabn c\u1ee7a module.exports nh\u01b0ng ng\u1eafn h\u01a1n<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">module<\/span><\/td>\n<td><span style=\"font-weight: 400;\">L\u00e0 tr\u00edch d\u1eabn cho module hi\u1ec7n t\u1ea1i<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">require<\/span><\/td>\n<td><span style=\"font-weight: 400;\">D\u00f9ng \u0111\u1ec3 nh\u1eadp module, file local v\u00e0 JSON<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center;\"><em><span style=\"font-weight: 400;\">\u0110\u1ed1i t\u01b0\u1ee3ng to\u00e0n c\u1ee5c<\/span><\/em><\/p>\n<h3><b>X\u1eed l\u00fd l\u1ed7i<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">C\u00e1c \u1ee9ng d\u1ee5ng NodeJS th\u01b0\u1eddng g\u1eb7p ph\u1ea3i b\u1ed1n lo\u1ea1i l\u1ed7i ph\u1ed5 bi\u1ebfn sau:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td rowspan=\"4\"><strong>4 l\u1ed7i trong tr\u1ea3i nghi\u1ec7m \u1ee9ng d\u1ee5ng NodeJS<\/strong><\/td>\n<td><span style=\"font-weight: 400;\">L\u1ed7i JavaScript th\u00f4ng th\u01b0\u1eddng<\/span><\/td>\n<td><span style=\"font-weight: 400;\">&lt;EvalError&gt;, &lt;SyntaxError&gt;, &lt;RangeError&gt;, &lt;ReferenceError&gt;, &lt;TypeError&gt;, &lt;URIError&gt;<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">L\u1ed7i h\u1ec7 th\u1ed1ng<\/span><\/td>\n<td><span style=\"font-weight: 400;\">&lt;File kh\u00f4ng t\u1ed3n t\u1ea1i&gt;, &lt;\u0111\u00f3ng socket&gt;<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">L\u1ed7i ng\u01b0\u1eddi d\u00f9ng<\/span><\/td>\n<td><span style=\"font-weight: 400;\">L\u1ed7i ch\u1ec9 \u0111\u1ecbnh b\u1edfi user trong code<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">L\u1ed7i assertion<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Lo\u1ea1i l\u1ed7i \u0111\u1eb7c bi\u1ec7t ch\u1ec9 x\u1ea3y ra khi vi ph\u1ea1m logic<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center;\"><em><span style=\"font-weight: 400;\">L\u1ed7i trong NodeJS<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">L\u1ed7i trong NodeJS \u0111\u01b0\u1ee3c x\u1eed l\u00fd th\u00f4ng qua c\u00e1c ngo\u1ea1i l\u1ec7. V\u00ed d\u1ee5: h\u00e3y x\u1eed l\u00fd l\u1ed7i x\u1ea3y ra khi ch\u00fang ta chia m\u1ed9t s\u1ed1 cho 0. L\u1ed7i n\u00e0y s\u1ebd l\u00e0m h\u1ecfng \u1ee9ng d\u1ee5ng NodeJS, v\u00ec v\u1eady ch\u00fang ta n\u00ean x\u1eed l\u00fd l\u1ed7i n\u00e0y \u0111\u1ec3 ti\u1ebfp t\u1ee5c th\u1ef1c thi \u1ee9ng d\u1ee5ng b\u00ecnh th\u01b0\u1eddng.<\/span><\/p>\n<pre>try {\r\n   var m = 1;\r\n   var n = 1\/O;\r\n    }\r\ncatch (err) {\r\n\/\/X\u1eed l\u00fd l\u1ed7i \u1edf \u0111\u00e2y\r\n}<\/pre>\n<h3><b>Lu\u1ed3ng (Streaming)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Lu\u1ed3ng l\u00e0 \u0111\u1ed1i t\u01b0\u1ee3ng cho ph\u00e9p b\u1ea1n \u0111\u1ecdc ho\u1eb7c ghi d\u1eef li\u1ec7u li\u00ean t\u1ee5c. C\u00f3 b\u1ed1n lo\u1ea1i lu\u1ed3ng:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">C\u00f3 th\u1ec3 \u0111\u1ecdc \u0111\u01b0\u1ee3c: \u0110\u00e2y l\u00e0 c\u00e1c lo\u1ea1i lu\u1ed3ng m\u00e0 d\u1eef li\u1ec7u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c \u0111\u1ecdc<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">C\u00f3 th\u1ec3 ghi: \u0110\u00e2y l\u00e0 c\u00e1c lo\u1ea1i lu\u1ed3ng m\u00e0 d\u1eef li\u1ec7u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c ghi v\u00e0o<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Duplex: \u0110\u00e2y l\u00e0 c\u00e1c lo\u1ea1i lu\u1ed3ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c \u0111\u1ecdc v\u00e0 ghi<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Chuy\u1ec3n \u0111\u1ed5i: C\u00e1c lu\u1ed3ng c\u00f3 th\u1ec3 thao t\u00e1c d\u1eef li\u1ec7u trong khi n\u00f3 \u0111ang \u0111\u01b0\u1ee3c \u0111\u1ecdc ho\u1eb7c ghi<\/span><\/li>\n<\/ol>\n<h3><b>B\u1ed9 \u0111\u1ec7m (Buffer)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">B\u1ed9 \u0111\u1ec7m l\u00e0 m\u1ed9t module cho ph\u00e9p x\u1eed l\u00fd c\u00e1c lu\u1ed3ng ch\u1ec9 ch\u1ee9a d\u1eef li\u1ec7u nh\u1ecb ph\u00e2n. M\u1ed9t b\u1ed9 \u0111\u1ec7m tr\u1ed1ng c\u00f3 \u0111\u1ed9 d\u00e0i &#8217;10&#8217; c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u1ea1o b\u1eb1ng ph\u01b0\u01a1ng ph\u00e1p n\u00e0y:<\/span><\/p>\n<pre>var buf = Buffer.alloc(10);<\/pre>\n<h3><b>Mi\u1ec1n (Domain)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Module mi\u1ec1n ch\u1eb7n c\u00e1c l\u1ed7i v\u1eabn ch\u01b0a \u0111\u01b0\u1ee3c x\u1eed l\u00fd. Hai ph\u01b0\u01a1ng ph\u00e1p \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ch\u1eb7n c\u00e1c l\u1ed7i n\u00e0y:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Li\u00ean k\u1ebft n\u1ed9i b\u1ed9: B\u1ed9 ph\u00e1t l\u1ed7i th\u1ef1c thi code c\u1ee7a n\u00f3 b\u00ean trong ph\u01b0\u01a1ng th\u1ee9c ch\u1ea1y<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Li\u00ean k\u1ebft b\u00ean ngo\u00e0i: B\u1ed9 ph\u00e1t l\u1ed7i \u0111\u01b0\u1ee3c th\u00eam r\u00f5 r\u00e0ng v\u00e0o mi\u1ec1n th\u00f4ng qua ph\u01b0\u01a1ng th\u1ee9c th\u00eam c\u1ee7a n\u00f3<\/span><\/li>\n<\/ol>\n<h3><b>DNS<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Module DNS \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 k\u1ebft n\u1ed1i v\u1edbi m\u00e1y ch\u1ee7 DNS v\u00e0 th\u1ef1c hi\u1ec7n ph\u00e2n gi\u1ea3i (resolve) t\u00ean b\u1eb1ng ph\u01b0\u01a1ng ph\u00e1p sau:<\/span><\/p>\n<pre>dns.resolve()<\/pre>\n<p><span style=\"font-weight: 400;\">Module DNS c\u0169ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 th\u1ef1c hi\u1ec7n ph\u00e2n gi\u1ea3i t\u00ean m\u00e0 kh\u00f4ng c\u1ea7n k\u1ebft n\u1ed1i m\u1ea1ng b\u1eb1ng ph\u01b0\u01a1ng ph\u00e1p sau:<\/span><\/p>\n<pre>dns.lookup()<\/pre>\n<h3><b>Tr\u00ecnh g\u1ee1 l\u1ed7i (Debugger)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS bao g\u1ed3m m\u1ed9t ti\u1ec7n \u00edch g\u1ee1 l\u1ed7i m\u00e0 c\u00f3 th\u1ec3 truy c\u1eadp th\u00f4ng qua m\u1ed9t \u1ee9ng d\u1ee5ng g\u1ee1 l\u1ed7i t\u00edch h\u1ee3p s\u1eb5n. Tr\u00ecnh g\u1ee1 l\u1ed7i NodeJS kh\u00f4ng c\u00f3 nhi\u1ec1u t\u00ednh n\u0103ng nh\u01b0ng h\u1ed7 tr\u1ee3 ki\u1ec3m tra code \u0111\u01a1n gi\u1ea3n.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Tr\u00ecnh g\u1ee1 l\u1ed7i c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong thi\u1ebft b\u1ecb \u0111\u1ea7u cu\u1ed1i b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng t\u1eeb kh\u00f3a <\/span><i><span style=\"font-weight: 400;\">inspect<\/span><\/i><span style=\"font-weight: 400;\"> tr\u01b0\u1edbc t\u00ean t\u1ec7p JavaScript. \u0110\u1ec3 ki\u1ec3m tra m\u1ed9t t\u1ec7p, v\u00ed d\u1ee5: myscript.js, b\u1ea1n c\u00f3 th\u1ec3 l\u00e0m theo ph\u01b0\u01a1ng ph\u00e1p n\u00e0y:<\/span><\/p>\n<pre>$ node inspect myscript.js<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Top_5_NodeJS_framework_danh_cho_nguoi_moi_bat_dau\"><\/span><b>Top 5 NodeJS framework d\u00e0nh cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><a href=\"https:\/\/expressjs.com\/\" target=\"_blank\" rel=\"noopener\"><b>Express.js<\/b><\/a><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-44892 aligncenter\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro.png\" alt=\"nodejs - expressjs - nodejs framework\" width=\"2552\" height=\"1088\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro.png 2552w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro-300x128.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro-640x273.png 640w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro-200x85.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro-768x327.png 768w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro-1536x655.png 1536w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro-2048x873.png 2048w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro-100x43.png 100w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro-700x298.png 700w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-express-js-vippro-1600x682.png 1600w\" sizes=\"auto, (max-width: 2552px) 100vw, 2552px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">N\u1ebfu \u0111\u00e3 l\u00e0m vi\u1ec7c v\u1edbi NodeJS th\u00ec ch\u1eafc h\u1eb3n b\u1ea1n \u0111\u00e3 t\u1eebng s\u1eed d\u1ee5ng ho\u1eb7c nghe n\u00f3i v\u1ec1 framework n\u00e0y. Express l\u00e0 m\u1ed9t NodeJS framework web nhanh v\u00e0 t\u1ed1i gi\u1ea3n v\u00e0 \u0111\u00e3 \u0111\u01b0\u1ee3c r\u1ea5t nhi\u1ec1u c\u00f4ng ty duy tr\u00ec v\u00e0 s\u1eed d\u1ee5ng t\u1ed1t trong m\u00f4i tr\u01b0\u1eddng s\u1ea3n xu\u1ea5t. Do \u0111\u00f3, b\u1ea1n c\u00f3 th\u1ec3 y\u00ean t\u00e2m s\u1eed d\u1ee5ng v\u00ec Express.js \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1eed nghi\u1ec7m v\u00e0 \u00e1p d\u1ee5ng nhi\u1ec1u trong th\u1ef1c t\u1ebf.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">B\u1ea1n c\u00f3 th\u1ec3 b\u1eaft \u0111\u1ea7u v\u1edbi Express b\u1eb1ng c\u00e1ch c\u00e0i \u0111\u1eb7t trong d\u1ef1 \u00e1n qua npm.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u00e2u l\u1ec7nh:<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">npm install express<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">V\u00ed d\u1ee5:<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">const express = require('express');<\/span>\r\n\r\n<span style=\"font-weight: 400;\">const app = express();<\/span>\r\n\r\n<span style=\"font-weight: 400;\">app.get('\/', function (req, res) {<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0res.send('Hello World')<\/span>\r\n\r\n<span style=\"font-weight: 400;\">});<\/span>\r\n\r\n<span style=\"font-weight: 400;\">app.listen(3000);<\/span><\/pre>\n<h3><a href=\"https:\/\/www.meteor.com\/\" target=\"_blank\" rel=\"noopener\"><b>Meteor.js<\/b><\/a><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-44891 aligncenter\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro.png\" alt=\"nodejs - meteorjs - nodejs framework\" width=\"2548\" height=\"1380\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro.png 2548w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro-300x162.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro-640x347.png 640w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro-200x108.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro-768x416.png 768w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro-1536x832.png 1536w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro-2048x1109.png 2048w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro-100x54.png 100w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro-700x379.png 700w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-meteor-js-vippro-1600x867.png 1600w\" sizes=\"auto, (max-width: 2548px) 100vw, 2548px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Meteor l\u00e0 m\u1ed9t NodeJS framework full-stack \u0111a n\u1ec1n t\u1ea3ng \u0111\u1ec3 x\u00e2y d\u1ef1ng m\u1ed9t \u1ee9ng d\u1ee5ng s\u1eed d\u1ee5ng JavaScript. B\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng Meteor, b\u1ea1n c\u00f3 th\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng ch\u1ea1y tr\u00ean web c\u0169ng nh\u01b0 tr\u00ean n\u1ec1n t\u1ea3ng di \u0111\u1ed9ng.<\/span><b><\/b><\/p>\n<h3><a href=\"https:\/\/koajs.com\/\" target=\"_blank\" rel=\"noopener\"><b>Koa.js<\/b><\/a><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-44890 aligncenter\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro.png\" alt=\"nodejs - koajs - nodejs framework\" width=\"2556\" height=\"1390\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro.png 2556w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro-300x163.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro-640x348.png 640w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro-200x109.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro-768x418.png 768w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro-1536x835.png 1536w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro-2048x1114.png 2048w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro-100x54.png 100w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro-700x381.png 700w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-koa-js-vippro-1600x870.png 1600w\" sizes=\"auto, (max-width: 2556px) 100vw, 2556px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Koa \u0111\u01b0\u1ee3c coi l\u00e0 m\u1ed9t NodeJS framework th\u1ebf h\u1ec7 ti\u1ebfp theo \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng b\u1edfi \u0111\u1ed9i ng\u0169 \u0111\u00e3 t\u1ea1o n\u00ean Express. Koa t\u1eadp trung v\u00e0o vi\u1ec7c t\u1eadn d\u1ee5ng c\u00e1c ch\u1ee9c n\u0103ng ECMA6 m\u1edbi nh\u1ea5t nh\u01b0 async\/await, t\u1eadp trung v\u00e0o vi\u1ec7c x\u1eed l\u00fd l\u1ed7i v\u00e0 lo\u1ea1i b\u1ecf callback hell.<\/span><\/p>\n<h3><a href=\"https:\/\/sailsjs.com\/\" target=\"_blank\" rel=\"noopener\"><b>Sails.js<\/b><\/a><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-44889 aligncenter\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro.png\" alt=\"nodejs - sailsjs - nodejs framework\" width=\"2546\" height=\"1382\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro.png 2546w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro-300x163.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro-640x347.png 640w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro-200x109.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro-768x417.png 768w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro-1536x834.png 1536w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro-2048x1112.png 2048w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro-100x54.png 100w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro-700x380.png 700w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-sails-js-vippro-1600x868.png 1600w\" sizes=\"auto, (max-width: 2546px) 100vw, 2546px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Sails.js l\u00e0 m\u1ed9t NodeJS framework MVC t\u1eadp trung v\u00e0o vi\u1ec7c x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng web s\u1eb5n s\u00e0ng \u0111\u1ec3 tri\u1ec3n khai v\u00e0o m\u00f4i tr\u01b0\u1eddng s\u1ea3n ph\u1ea9m. Sails.js cung c\u1ea5p nhi\u1ec1u h\u1ed7 tr\u1ee3 c\u01a1 s\u1edf d\u1eef li\u1ec7u, API \u0111\u01b0\u1ee3c t\u1ea1o t\u1ef1 \u0111\u1ed9ng, t\u00edch h\u1ee3p v\u1edbi b\u1ea5t k\u1ef3 framework giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng n\u00e0o v\u00e0 c\u00f3 t\u00edch h\u1ee3p s\u1eb5n c\u00e1c plugin cho web.<\/span><\/p>\n<h3><a href=\"https:\/\/loopback.io\/\" target=\"_blank\" rel=\"noopener\"><b>Loopback.js<\/b><\/a><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-44888 aligncenter\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro.png\" alt=\"nodejs - loopbackjs - nodejs framework\" width=\"2552\" height=\"1390\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro.png 2552w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro-300x163.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro-640x349.png 640w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro-200x109.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro-768x418.png 768w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro-1536x837.png 1536w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro-2048x1115.png 2048w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro-100x54.png 100w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro-700x381.png 700w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/nodejs-loopback-js-vippro-1600x871.png 1600w\" sizes=\"auto, (max-width: 2552px) 100vw, 2552px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Loopback l\u00e0 m\u1ed9t NodeJS framework d\u00f9ng \u0111\u1ec3 x\u00e2y d\u1ef1ng API REST c\u1ea5p s\u1ea3n xu\u1ea5t t\u1eeb \u0111\u1ea7u \u0111\u1ebfn cu\u1ed1i. Loopback \u0111\u01b0\u1ee3c IBM duy tr\u00ec v\u00e0 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng b\u1edfi c\u00e1c c\u00f4ng ty n\u1eb1m trong danh s\u00e1ch Fortune 500 nh\u01b0 Bank of America.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Loopback c\u00f2n cung c\u1ea5p ngu\u1ed3n t\u00e0i li\u1ec7u phong ph\u00fa \u0111\u1ec3 c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng b\u1eaft \u0111\u1ea7u.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"NodeJS_phu_hop_voi_nhung_ung_dung_nao\"><\/span><b>NodeJS ph\u00f9 h\u1ee3p v\u1edbi nh\u1eefng \u1ee9ng d\u1ee5ng n\u00e0o?<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">T\u1eeb c\u00f4ng ty kh\u1edfi nghi\u1ec7p \u0111\u1ebfn c\u00e1c doanh nghi\u1ec7p thu\u1ed9c nhi\u1ec1u quy m\u00f4 kh\u00e1c nhau \u0111\u1ec1u c\u00f3 th\u1ec3 ch\u1ecdn NodeJS khi c\u1ea7n ph\u00e1t tri\u1ec3n m\u1ed9t \u1ee9ng d\u1ee5ng web \u1ed5n \u0111\u1ecbnh v\u00e0 c\u00f3 th\u1ec3 m\u1edf r\u1ed9ng. Do t\u00ednh ch\u1ea5t h\u01b0\u1edbng \u0111\u1ebfn s\u1ef1 ki\u1ec7n, NodeJS v\u01b0\u1ee3t tr\u1ed9i h\u01a1n c\u00e1c m\u00f4 h\u00ecnh l\u00e0m vi\u1ec7c kh\u00e1c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Sau \u0111\u00e2y l\u00e0 m\u1ed9t v\u00e0i v\u00ed d\u1ee5 \u1ee9ng d\u1ee5ng n\u1ed5i b\u1eadt:<\/span><\/p>\n<h3><b>C\u00f4ng c\u1ee5 c\u1ed9ng t\u00e1c th\u1eddi gian th\u1ef1c (Real-Time Collaboration Tools)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 m\u1ea1nh m\u1ebd \u0111\u1ec3 t\u1ea1o ra c\u00e1c c\u00f4ng c\u1ee5 c\u1ed9ng t\u00e1c theo th\u1eddi gian th\u1ef1c, t\u1eeb \u1ee9ng d\u1ee5ng l\u00e0m vi\u1ec7c chung \u0111\u1ebfn qu\u1ea3n l\u00fd d\u1ef1 \u00e1n, h\u1ed9i th\u1ea3o video v\u00e0 \u00e2m thanh c\u0169ng nh\u01b0 ch\u1ec9nh s\u1eeda t\u00e0i li\u1ec7u c\u1ed9ng t\u00e1c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0110i\u1ec1u \u0111\u00f3 gi\u1ea3i th\u00edch t\u1ea1i sao NodeJS l\u00e0 n\u1ec1n t\u1ea3ng cho nhi\u1ec1u c\u00f4ng c\u1ee5 c\u1ed9ng t\u00e1c ph\u1ed5 bi\u1ebfn thu\u1ed9c s\u1edf h\u1eefu c\u1ee7a c\u00e1c c\u00f4ng ty c\u00f4ng ngh\u1ec7 l\u1edbn, ch\u1eb3ng h\u1ea1n nh\u01b0 Trello \u0111\u1ec3 qu\u1ea3n l\u00fd d\u1ef1 \u00e1n v\u00e0 Slack \u0111\u1ec3 tr\u00f2 chuy\u1ec7n nh\u00f3m v\u00e0 li\u00ean l\u1ea1c nh\u00f3m t\u1eeb xa. Ki\u1ebfn tr\u00fac d\u1ef1a tr\u00ean s\u1ef1 ki\u1ec7n v\u00e0 kh\u00f4ng \u0111\u1ed3ng b\u1ed9 c\u1ee7a NodeJS cung c\u1ea5p n\u1ec1n t\u1ea3ng v\u00e0 ho\u00e0n to\u00e0n ph\u00f9 h\u1ee3p v\u1edbi vi\u1ec7c x\u00e2y d\u1ef1ng v\u00e0 m\u1edf r\u1ed9ng c\u00e1c \u1ee9ng d\u1ee5ng c\u1ed9ng t\u00e1c.<\/span><\/p>\n<h3><b>\u1ee8ng d\u1ee5ng th\u1eddi gian th\u1ef1c<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">X\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng m\u1ea1ng th\u1eddi gian th\u1ef1c l\u00e0 m\u1ed9t trong nh\u1eefng t\u00ednh n\u0103ng t\u1ed1t nh\u1ea5t c\u1ee7a NodeJS. B\u1ea1n c\u00f3 th\u1ec3 l\u00e0m t\u1ea5t c\u1ea3, t\u1eeb x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng tr\u00f2 chuy\u1ec7n th\u1eddi gian th\u1ef1c nh\u01b0 \u1ee9ng d\u1ee5ng nh\u1eafn tin t\u1ee9c th\u1eddi (IM) v\u00e0 tr\u00f2 chuy\u1ec7n chuy\u1ec3n ti\u1ebfp qua internet (IRC) \u0111\u1ebfn x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng th\u1eddi gian th\u1ef1c ph\u1ee9c t\u1ea1p.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">NodeJS cung c\u1ea5p c\u00e1c t\u00ednh n\u0103ng c\u01a1 b\u1ea3n \u0111\u1ec3 x\u00e2y d\u1ef1ng v\u00e0 tri\u1ec3n khai c\u00e1c \u1ee9ng d\u1ee5ng m\u1ea1ng v\u00e0 th\u1eddi gian th\u1ef1c b\u1eb1ng API s\u1ef1 ki\u1ec7n. N\u00f3 c\u00f3 th\u1ec3 t\u1ea1o m\u1ed9t \u0111\u1ed1i t\u01b0\u1ee3ng, \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 b\u1ed9 ph\u00e1t, ph\u00e1t ra c\u00e1c s\u1ef1 ki\u1ec7n \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean theo \u0111\u1ecbnh k\u1ef3 v\u00e0 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c x\u1eed l\u00fd b\u1edfi c\u00e1c tr\u00ecnh x\u1eed l\u00fd s\u1ef1 ki\u1ec7n.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nh\u1edd ki\u1ebfn tr\u00fac d\u1ef1a tr\u00ean s\u1ef1 ki\u1ec7n, NodeJS ho\u1ea1t \u0111\u1ed9ng hi\u1ec7u qu\u1ea3 v\u1edbi giao th\u1ee9c WebSockets, h\u1ed7 tr\u1ee3 giao ti\u1ebfp hai chi\u1ec1u theo th\u1eddi gian th\u1ef1c gi\u1eefa m\u00e1y ch\u1ee7 v\u00e0 m\u00e1y kh\u00e1ch.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">NodeJS c\u00f3 h\u1ed7 tr\u1ee3 WebSockets tuy\u1ec7t v\u1eddi th\u00f4ng qua c\u00e1c th\u01b0 vi\u1ec7n nh\u01b0 Socket.io v\u00e0 WebSocket-node, m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng \u0111\u1ec3 t\u1ea1o v\u00e0 tri\u1ec3n khai c\u00e1c cu\u1ed9c tr\u00f2 chuy\u1ec7n theo th\u1eddi gian th\u1ef1c m\u1ed9t c\u00e1ch nhanh ch\u00f3ng v\u00e0 hi\u1ec7u qu\u1ea3.<\/span><\/p>\n<h3><b>\u1ee8ng d\u1ee5ng d\u1ef1a tr\u00ean v\u1ecb tr\u00ed<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">B\u1ea3n ch\u1ea5t kh\u00f4ng \u0111\u1ed3ng b\u1ed9 c\u1ee7a NodeJS v\u00e0 kh\u1ea3 n\u0103ng cung c\u1ea5p c\u00e1c b\u1ea3n c\u1eadp nh\u1eadt theo th\u1eddi gian th\u1ef1c khi\u1ebfn n\u00f3 tr\u1edf th\u00e0nh l\u1ef1a ch\u1ecdn h\u00e0ng \u0111\u1ea7u \u0111\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng d\u1ef1a tr\u00ean v\u1ecb tr\u00ed \u0111\u1ecba l\u00fd.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">V\u00e0o n\u0103m 2020, s\u1ed1 l\u01b0\u1ee3ng \u1ee9ng d\u1ee5ng d\u1ef1a tr\u00ean v\u1ecb tr\u00ed \u0111\u00e3 t\u0103ng l\u00ean. H\u1ea7u h\u1ebft c\u00e1c \u1ee9ng d\u1ee5ng n\u00e0y s\u1eed d\u1ee5ng NodeJS v\u00e0 c\u00e1c ng\u0103n x\u1ebfp li\u00ean quan kh\u00e1c do c\u00e1c t\u00ednh n\u0103ng c\u1ee7a NodeJS nh\u01b0 ki\u1ebfn tr\u00fac d\u1ef1a tr\u00ean s\u1ef1 ki\u1ec7n v\u00e0 l\u1eadp tr\u00ecnh kh\u00f4ng \u0111\u1ed3ng b\u1ed9 \u0111\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng m\u1ea1ng v\u00e0 th\u1eddi gian th\u1ef1c.<\/span><\/p>\n<h3><b>\u1ee8ng d\u1ee5ng m\u1ed9t trang (Single-Page App)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">\u1ee8ng d\u1ee5ng m\u1ed9t trang (SPA) kh\u00f4ng ph\u1ea3i l\u00e0 kh\u00e1i ni\u1ec7m m\u1edbi \u0111\u1ed1i v\u1edbi l\u1eadp tr\u00ecnh web. \u0110\u00f3 l\u00e0 m\u1ed9t t\u1eeb th\u00f4ng d\u1ee5ng ph\u1ed5 bi\u1ebfn m\u00f4 t\u1ea3 c\u00e1ch ti\u1ebfp c\u1eadn trong \u0111\u00f3 to\u00e0n b\u1ed9 \u1ee9ng d\u1ee5ng n\u1eb1m g\u1ecdn tr\u00ean m\u1ed9t trang duy nh\u1ea5t, v\u1edbi tr\u1ea3i nghi\u1ec7m t\u1ed1t h\u01a1n c\u1ee7a l\u1eadp tr\u00ecnh vi\u00ean.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">NodeJS r\u1ea5t l\u00fd t\u01b0\u1edfng cho c\u00e1c SPA v\u00ec n\u00f3 x\u1eed l\u00fd c\u00e1c cu\u1ed9c g\u1ecdi kh\u00f4ng \u0111\u1ed3ng b\u1ed9 v\u00e0 kh\u1ed1i l\u01b0\u1ee3ng c\u00f4ng vi\u1ec7c I\/O n\u1eb7ng nhanh h\u01a1n v\u00e0 hi\u1ec7u qu\u1ea3 h\u01a1n. \u0110\u1ec3 chuy\u1ec3n \u0111\u1ed5i d\u1eef li\u1ec7u li\u1ec1n m\u1ea1ch gi\u1eefa Ch\u1ebf \u0111\u1ed9 xem v\u00e0 m\u00e1y ch\u1ee7, v\u00f2ng l\u1eb7p s\u1ef1 ki\u1ec7n NodeJS \u0111\u01b0\u1ee3c ph\u00e9p \u201ctr\u00ec ho\u00e3n\u201d nhi\u1ec1u y\u00eau c\u1ea7u \u0111\u1ed3ng th\u1eddi t\u1eeb m\u00e1y kh\u00e1ch, cho ph\u00e9p x\u1eed l\u00fd tr\u01a1n tru.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">NodeJS c\u0169ng l\u00e0 m\u1ed9t l\u1ef1a ch\u1ecdn tuy\u1ec7t v\u1eddi \u0111\u1ec3 x\u00e2y d\u1ef1ng ph\u1ea7n back-end c\u1ee7a SPA v\u1edbi c\u00e1ch ti\u1ebfp c\u1eadn d\u1ef1a tr\u00ean d\u1eef li\u1ec7u. Ch\u00fang ta c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00e1c khung JavaScript nh\u01b0 Express.js, Adonis.js ho\u1eb7c Koa \u0111\u1ec3 l\u1eadp tr\u00ecnh ph\u1ea7n back-end SPA ph\u1ee9c t\u1ea1p v\u00e0 s\u1eed d\u1ee5ng nhi\u1ec1u d\u1eef li\u1ec7u.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ngo\u00e0i ra, b\u1ea1n c\u0169ng c\u00f3 th\u1ec3 ph\u00e1t tri\u1ec3n c\u00e1c lo\u1ea1i \u1ee9ng d\u1ee5ng web sau b\u1eb1ng NodeJS:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u1ee8ng d\u1ee5ng qu\u1ea3n l\u00fd d\u1ef1 \u00e1n<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u1ee8ng d\u1ee5ng truy\u1ec1n th\u00f4ng x\u00e3 h\u1ed9i<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u1ee8ng d\u1ee5ng tr\u00f2 ch\u01a1i<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u1ee8ng d\u1ee5ng ph\u00e1t video tr\u1ef1c ti\u1ebfp<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Di\u1ec5n \u0111\u00e0n th\u1ea3o lu\u1eadn ho\u1eb7c tr\u00f2 chuy\u1ec7n<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u1ee8ng d\u1ee5ng <a href=\"https:\/\/itviec.com\/blog\/iot-la-gi\/\" target=\"_blank\" rel=\"noopener\">IoT<\/a><\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Tai_lieu_hoc_NodeJS_danh_cho_nguoi_moi_bat_dau\"><\/span><b>T\u00e0i li\u1ec7u h\u1ecdc NodeJS d\u00e0nh cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u<br \/>\n<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Sau \u0111\u00e2y l\u00e0 5 t\u00e0i nguy\u00ean mi\u1ec5n ph\u00ed h\u00e0ng \u0111\u1ea7u \u0111\u1ec3 h\u1ecdc NodeJS:<\/span><\/p>\n<p><a href=\"http:\/\/nodetuts.com\/\" target=\"_blank\" rel=\"noopener\"><b>Node Tuts<\/b><\/a><\/p>\n<p><span style=\"font-weight: 400;\">M\u1ed9t trang web t\u1ea5t c\u1ea3 trong m\u1ed9t \u0111\u1ec3 t\u00ecm hi\u1ec3u m\u1ecdi th\u1ee9 v\u1ec1 NodeJS. N\u00f3 ch\u1ee9a c\u00e1c h\u01b0\u1edbng d\u1eabn cho c\u1ea3 ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u v\u00e0 ng\u01b0\u1eddi k\u1ef3 c\u1ef1u. Trang web cung c\u1ea5p video, t\u00e0i li\u1ec7u v\u00e0 c\u00e1c v\u00ed d\u1ee5 \u0111\u1ec3 gi\u1ea3i quy\u1ebft. T\u00e0i li\u1ec7u bao g\u1ed3m ph\u1ea7n l\u1eadp tr\u00ecnh v\u00e0 m\u1ed9t s\u1ed1 kh\u00e1i ni\u1ec7m c\u1ed1t l\u00f5i th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong l\u1eadp tr\u00ecnh, tr\u00e1nh l\u1ed7i, m\u1eabu thi\u1ebft k\u1ebf cho NodeJS, v.v.<\/span><\/p>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=-u-j7uqU7sI&amp;list=PL6gx4Cwl9DGBMdkKFn3HasZnnAqVjzHn_\" target=\"_blank\" rel=\"noopener\"><b>NodeJS Tutorial for Beginners<\/b><\/a><\/p>\n<p><span style=\"font-weight: 400;\">\u0110\u00e2y l\u00e0 m\u1ed9t YouTube playlist ho\u00e0n ch\u1ec9nh d\u00e0nh cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u NodeJS. Ng\u01b0\u1eddi xem ph\u1ea3i c\u00f3 ki\u1ebfn th\u1ee9c c\u01a1 b\u1ea3n v\u1ec1 JavaScript tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u xem h\u01b0\u1edbng d\u1eabn. Nhi\u1ec1u ch\u1ee7 \u0111\u1ec1, bao g\u1ed3m truy\u1ec1n d\u1eef li\u1ec7u JSON, Express.js, JavaScript nh\u00fang v\u00e0 c\u00e1ch s\u1eed d\u1ee5ng tr\u1ea1ng th\u00e1i c\u0169ng \u0111\u01b0\u1ee3c \u0111\u1ec1 c\u1eadp.<\/span><\/p>\n<p><a href=\"https:\/\/anotheruiguy.gitbooks.io\/nodeexpreslibsass_from-scratch\/content\/\" target=\"_blank\" rel=\"noopener\"><b>Build a NodeJS Project from scratch<\/b><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Cu\u1ed1n s\u00e1ch n\u00e0y bao g\u1ed3m c\u1ea3 m\u1ed9t h\u1ec7 sinh th\u00e1i c\u00e1c c\u00f4ng c\u1ee5 b\u1ea1n c\u1ea7n bi\u1ebft trong th\u1ebf gi\u1edbi \u201cJavaScript full-stack\u201d nh\u01b0 ngo\u00e0i Node, c\u00f2n c\u00f3 Express, NPM, Bower, Grunt, Gulp, v.v. M\u1ee5c ti\u00eau c\u1ee7a cu\u1ed1n s\u00e1ch n\u00e0y kh\u00f4ng ph\u1ea3i l\u00e0 \u0111i s\u00e2u v\u00e0o b\u1ea5t k\u1ef3 ch\u1ee7 \u0111\u1ec1 c\u1ee5 th\u1ec3 n\u00e0o m\u00e0 l\u00e0 cung c\u1ea5p c\u00e1i nh\u00ecn t\u1ed5ng quan v\u1ec1 ki\u1ebfn th\u1ee9c c\u1ea7n thi\u1ebft \u0111\u1ec3 x\u00e2y d\u1ef1ng n\u1ec1n t\u1ea3ng t\u1ed1t.<\/span><\/p>\n<p><a href=\"https:\/\/www.youtube.com\/playlist?list=PL55RiY5tL51oGJorjEgl6NVeDbx_fO5jR\" target=\"_blank\" rel=\"noopener\"><b>NodeJS Basics<\/b><\/a><\/p>\n<p><span style=\"font-weight: 400;\">\u0110\u00e2y l\u00e0 danh s\u00e1ch ph\u00e1t tr\u00ean YouTube d\u00e0nh cho ki\u1ebfn th\u1ee9c c\u01a1 b\u1ea3n v\u1ec1 NodeJS. Chu\u1ed7i video n\u00e0y c\u0169ng bao g\u1ed3m vi\u1ec7c t\u00edch h\u1ee3p v\u1edbi MongoDB, c\u00e1c thao t\u00e1c CRUD c\u01a1 b\u1ea3n v\u00e0 Express.js.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nh\u00ecn chung, \u0111\u00e2y l\u00e0 s\u1ef1 l\u1ef1a ch\u1ecdn tuy\u1ec7t v\u1eddi d\u00e0nh cho c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean back-end m\u1edbi b\u1eaft \u0111\u1ea7u \u0111\u1ec3 th\u00fac \u0111\u1ea9y s\u1ef1 nghi\u1ec7p.<\/span><\/p>\n<p><a href=\"https:\/\/nodeschool.io\/#workshoppers\" target=\"_blank\" rel=\"noopener\"><b>NodeSchool<\/b><\/a><\/p>\n<p><span style=\"font-weight: 400;\">M\u1ed9t n\u1ec1n t\u1ea3ng tr\u1ef1c tuy\u1ebfn gi\u00fap c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean t\u00ecm hi\u1ec3u m\u1ecdi th\u1ee9 v\u1ec1 NodeJS. M\u1ecdi ch\u1ee7 \u0111\u1ec1 li\u00ean quan \u0111\u1ebfn NodeJS \u0111\u1ec1u \u0111\u01b0\u1ee3c \u0111\u1ec1 c\u1eadp,bao g\u1ed3m frontend, back-end, hosting, ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n, g\u1ee1 l\u1ed7i v\u00e0 l\u1eadp tr\u00ecnh full-stack. N\u1ec1n t\u1ea3ng d\u00e0nh cho c\u1ea3 ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u v\u00e0 l\u1eadp tr\u00ecnh vi\u00ean n\u00e2ng cao.<\/span><\/p>\n<blockquote><p><em>Tham kh\u1ea3o th\u00eam: <a href=\"https:\/\/itviec.com\/blog\/hoc-nodejs\/\" target=\"_blank\" rel=\"noopener\"><strong>15+ T\u00e0i li\u1ec7u h\u1ecdc NodeJS \u201cch\u1ea5t\u201d d\u00e0nh cho Developer<\/strong><\/a><\/em><\/p><\/blockquote>\n<h2><span class=\"ez-toc-section\" id=\"Cac_cau_hoi_thuong_gap_ve_NodeJS\"><\/span><b>C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 NodeJS<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><b>NodeJS l\u00e0 g\u00ec?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS l\u00e0 m\u00f4i tr\u01b0\u1eddng th\u1eddi gian ch\u1ea1y JavaScript m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 \u0111a n\u1ec1n t\u1ea3ng. N\u00f3 d\u1ef1a tr\u00ean c\u00f4ng c\u1ee5 th\u1eddi gian ch\u1ea1y V8 JS c\u1ee7a Chrome, c\u00f3 th\u1ec3 chuy\u1ec3n \u0111\u1ed5i m\u00e3 JS th\u00e0nh m\u00e3 m\u00e1y c\u1ea5p th\u1ea5p.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">M\u1ee5c \u0111\u00edch ch\u00ednh c\u1ee7a NodeJS l\u00e0 ph\u00e1t tri\u1ec3n c\u00e1c \u1ee9ng d\u1ee5ng web c\u00f3 th\u1ec3 m\u1edf r\u1ed9ng. NodeJS ph\u00e1t tri\u1ec3n r\u1ea5t nhanh v\u00e0 \u0111\u00e3 \u0111\u01b0\u1ee3c ch\u1ee9ng minh l\u00e0 l\u00fd t\u01b0\u1edfng \u0111\u1ec3 ph\u00e1t tri\u1ec3n \u1ee9ng d\u1ee5ng cho thi\u1ebft b\u1ecb IoT, ch\u01a1i game, truy\u1ec1n ph\u00e1t video, c\u00e1c \u1ee9ng d\u1ee5ng web chung, d\u1ef1a tr\u00ean m\u1ea1ng v\u00e0 th\u1eddi gian th\u1ef1c.<\/span><\/p>\n<h3><b>Nh\u1eefng h\u1ea1n ch\u1ebf c\u1ee7a NodeJS<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u0110\u01a1n lu\u1ed3ng: NodeJS ch\u1ec9 s\u1eed d\u1ee5ng m\u1ed9t lu\u1ed3ng ch\u00ednh, c\u00f3 th\u1ec3 g\u00e2y t\u1eafc ngh\u1ebdn cho \u1ee9ng d\u1ee5ng n\u1ebfu c\u00f3 t\u00e1c v\u1ee5 t\u1ed1n th\u1eddi gian.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Kh\u00f4ng ph\u00f9 h\u1ee3p cho c\u00e1c t\u00e1c v\u1ee5 n\u1eb7ng: NodeJS kh\u00f4ng t\u1ed1t cho c\u00e1c \u1ee9ng d\u1ee5ng y\u00eau c\u1ea7u t\u00ednh to\u00e1n nhi\u1ec1u.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Callback Hell: Vi\u1ec7c s\u1eed d\u1ee5ng callback c\u00f3 th\u1ec3 d\u1eabn \u0111\u1ebfn m\u00e3 kh\u00f3 \u0111\u1ecdc v\u00e0 qu\u1ea3n l\u00fd.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">S\u1ef1 ph\u1ee5 thu\u1ed9c v\u00e0o c\u00e1c module: S\u1ef1 \u0111a d\u1ea1ng c\u1ee7a c\u00e1c module trong c\u1ed9ng \u0111\u1ed3ng NodeJS c\u00f3 th\u1ec3 t\u1ea1o ra kh\u00f3 kh\u0103n trong vi\u1ec7c ch\u1ecdn v\u00e0 duy tr\u00ec ch\u00fang.<\/span><\/li>\n<\/ul>\n<h3><b>NodeJS c\u00f3 t\u1ed1t cho MVP v\u00e0 prototype kh\u00f4ng?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">V\u00ec Node \u0111\u01b0\u1ee3c trang b\u1ecb m\u1ed9t kho module l\u1edbn trong NPM n\u00ean c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng t\u1ea1o prototype v\u00e0 t\u1ea1o MVP r\u1ea5t nhanh. \u0110i\u1ec1u n\u00e0y gi\u00fap MVP \u0111\u01b0\u1ee3c tung ra th\u1ecb tr\u01b0\u1eddng s\u1edbm \u0111\u1ec3 gi\u00e0nh \u0111\u01b0\u1ee3c l\u1ee3i th\u1ebf c\u1ea1nh tranh v\u00e0 sau \u0111\u00f3 ti\u1ebfp t\u1ee5c m\u1edf r\u1ed9ng quy m\u00f4 \u1ee9ng d\u1ee5ng theo y\u00eau c\u1ea7u v\u00e0 ng\u00e2n s\u00e1ch.<\/span><\/p>\n<h3><b>N\u00ean s\u1eed d\u1ee5ng c\u01a1 s\u1edf d\u1eef li\u1ec7u n\u00e0o cho NodeJS?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">NodeJS c\u00f3 th\u1ec3 ho\u1ea1t \u0111\u1ed9ng hi\u1ec7u qu\u1ea3 v\u1edbi b\u1ea5t k\u1ef3 c\u01a1 s\u1edf d\u1eef li\u1ec7u n\u00e0o \u2013 c\u1ea3 c\u01a1 s\u1edf d\u1eef li\u1ec7u <a href=\"https:\/\/itviec.com\/blog\/sql-la-gi\/\" target=\"_blank\" rel=\"noopener\">SQL<\/a> nh\u01b0 PostgreSQL ho\u1eb7c NoSQL nh\u01b0 MongoDB.<\/span><\/p>\n<blockquote><p><em>\u0110\u1ecdc th\u00eam: <strong><a href=\"https:\/\/itviec.com\/blog\/mongodb-la-gi\/\" target=\"_blank\" rel=\"noopener\">MongoDB l\u00e0 g\u00ec<\/a>? \u0110\u1ecbnh ngh\u0129a v\u00e0 Hi\u1ec3u r\u00f5 A-Z v\u1ec1 MongoDB<\/strong><\/em><\/p><\/blockquote>\n<h2><span class=\"ez-toc-section\" id=\"Tong_ket_NodeJS_la_gi\"><\/span><b>T\u1ed5ng k\u1ebft NodeJS l\u00e0 g\u00ec<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">M\u1ed9t trong nh\u1eefng l\u1ee3i \u00edch ch\u00ednh c\u1ee7a NodeJS, hay c\u00f2n \u0111\u01b0\u1ee3c bi\u1ebft \u0111\u1ebfn l\u00e0 Node.js, l\u00e0 ki\u1ebfn tr\u00fac h\u01b0\u1edbng s\u1ef1 ki\u1ec7n, kh\u00f4ng ch\u1eb7n. B\u1ea3n ch\u1ea5t kh\u00f4ng \u0111\u1ed3ng b\u1ed9 n\u00e0y cho ph\u00e9p c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean x\u1eed l\u00fd hi\u1ec7u qu\u1ea3 m\u1ed9t s\u1ed1 l\u01b0\u1ee3ng l\u1edbn k\u1ebft n\u1ed1i \u0111\u1ed3ng th\u1eddi m\u00e0 kh\u00f4ng c\u1ea7n nhi\u1ec1u t\u00e0i nguy\u00ean ph\u1ea7n c\u1ee9ng.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Do \u0111\u00f3, c\u00e1c \u1ee9ng d\u1ee5ng \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng b\u1eb1ng NodeJS c\u1ef1c k\u1ef3 nhanh v\u00e0 ph\u1ea3n h\u1ed3i nhanh. Ngo\u00e0i ra, NodeJS c\u00f2n th\u00fac \u0111\u1ea9y vi\u1ec7c t\u00e1i s\u1eed d\u1ee5ng code v\u00e0 t\u00ednh module h\u00f3a th\u00f4ng qua tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i, NPM, n\u01a1i l\u01b0u tr\u1eef m\u1ed9t h\u1ec7 sinh th\u00e1i r\u1ed9ng l\u1edbn g\u1ed3m c\u00e1c th\u01b0 vi\u1ec7n ngu\u1ed3n m\u1edf. \u0110i\u1ec1u n\u00e0y th\u00fac \u0111\u1ea9y s\u1ef1 ph\u00e1t tri\u1ec3n nhanh ch\u00f3ng, ti\u1ebft ki\u1ec7m c\u1ea3 th\u1eddi gian v\u00e0 c\u00f4ng s\u1ee9c.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">H\u01a1n n\u1eefa, NodeJS t\u1ea1o \u0111i\u1ec1u ki\u1ec7n ph\u00e1t tri\u1ec3n JavaScript to\u00e0n di\u1ec7n, gi\u00fap duy tr\u00ec v\u00e0 \u0111\u1ed3ng b\u1ed9 h\u00f3a code gi\u1eefa ph\u00eda m\u00e1y ch\u1ee7 v\u00e0 ph\u00eda m\u00e1y kh\u00e1ch d\u1ec5 d\u00e0ng h\u01a1n. Nh\u1eefng \u01b0u \u0111i\u1ec3m n\u00e0y, c\u00f9ng v\u1edbi nh\u1eefng \u01b0u \u0111i\u1ec3m kh\u00e1c, \u0111\u00e3 \u0111\u1ecbnh v\u1ecb NodeJS nh\u01b0 m\u1ed9t c\u00f4ng c\u1ee5 c\u00f3 gi\u00e1 tr\u1ecb \u0111\u1ec3 t\u1ea1o c\u00e1c \u1ee9ng d\u1ee5ng web c\u00f3 hi\u1ec7u su\u1ea5t cao v\u00e0 c\u00f3 kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng.<\/span><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" class=\"sp-no-webp wp-image-5668 aligncenter sp-no-webp entered lazyloaded\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-200x200.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-60x60.png 60w\" alt=\"robby-2\" width=\"300\" height=\"300\" data-lazy-src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png\" data-lazy-sizes=\"(max-width: 300px) 100vw, 300px\" data-lazy-srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-200x200.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-60x60.png 60w\" data-ll-status=\"loaded\" \/><\/figure>\n<\/div>\n<p id=\"block-bdf220a1-3635-4794-9101-81d879939b92\" class=\"has-text-align-center\" style=\"text-align: center;\"><strong>B\u1ea1n th\u1ea5y b\u00e0i vi\u1ebft hay v\u00e0 h\u1eefu \u00edch? \u0110\u1eebng ng\u1ea1i Share v\u1edbi b\u1ea1n b\u00e8 v\u00e0 \u0111\u1ed3ng nghi\u1ec7p nh\u00e9.<\/strong><\/p>\n<p id=\"block-a1315aab-406f-48df-97fc-6b9584e6e134\" class=\"has-text-align-center\" style=\"text-align: center;\"><strong>V\u00e0 nhanh tay tham kh\u1ea3o\u00a0<a href=\"http:\/\/itviec.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">vi\u1ec7c l\u00e0m IT<\/a>\u00a0\u201cch\u1ea5t\u201d tr\u00ean ITviec<\/strong>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>NodeJS, hay c\u00f2n vi\u1ebft l\u00e0 Node.js, l\u00e0 m\u1ed9t y\u1ebfu t\u1ed1 then ch\u1ed1t trong l\u1eadp tr\u00ecnh web hi\u1ec7n \u0111\u1ea1i, thay \u0111\u1ed5i c\u00e1ch ch\u00fang ta x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng ph\u00eda m\u00e1y ch\u1ee7 b\u1eb1ng JavaScript. Cho d\u00f9 b\u1ea1n l\u00e0 l\u1eadp tr\u00ecnh vi\u00ean d\u00e0y d\u1eb7n kinh nghi\u1ec7m hay ng\u01b0\u1eddi m\u1edbi b\u01b0\u1edbc v\u00e0o l\u1eadp tr\u00ecnh, nh\u1eefng ki\u1ebfn th\u1ee9c n\u1ec1n [&hellip;]<\/p>\n","protected":false},"author":95,"featured_media":44896,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[109,10106],"tags":[],"class_list":["post-44790","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuyen-mon-it","category-tai-lieu-js"],"blocksy_meta":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>NodeJS l\u00e0 g\u00ec: T\u1ed5ng quan NodeJS v\u00e0 Top NodeJS framework<\/title>\n<meta name=\"description\" content=\"NodeJS, hay Node.js, l\u00e0 runtime environment JavaScript \u0111a n\u1ec1n t\u1ea3ng v\u00e0 ngu\u1ed3n m\u1edf. Hi\u1ec3u r\u00f5 NodeJS s\u1ebd gi\u00fap developer t\u1ed1i \u01b0u hi\u1ec7u qu\u1ea3 l\u00e0m vi\u1ec7c.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NodeJS l\u00e0 g\u00ec: T\u1ed5ng quan ki\u1ebfn th\u1ee9c NodeJS v\u00e0 Top 5 NodeJS framework\" \/>\n<meta property=\"og:description\" content=\"NodeJS, hay c\u00f2n vi\u1ebft l\u00e0 Node.js, l\u00e0 m\u1ed9t y\u1ebfu t\u1ed1 then ch\u1ed1t trong l\u1eadp tr\u00ecnh web hi\u1ec7n \u0111\u1ea1i, thay \u0111\u1ed5i c\u00e1ch ch\u00fang ta x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng ph\u00eda m\u00e1y ch\u1ee7 b\u1eb1ng\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/\" \/>\n<meta property=\"og:site_name\" content=\"ITviec Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ITviec\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-04T02:59:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-29T15:44:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/NodeJS-blog-vippro.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"950\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tuong Uyen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ITviec\" \/>\n<meta name=\"twitter:site\" content=\"@ITviec\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tuong Uyen\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 ph\u00fat\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"NodeJS l\u00e0 g\u00ec: T\u1ed5ng quan NodeJS v\u00e0 Top NodeJS framework","description":"NodeJS, hay Node.js, l\u00e0 runtime environment JavaScript \u0111a n\u1ec1n t\u1ea3ng v\u00e0 ngu\u1ed3n m\u1edf. Hi\u1ec3u r\u00f5 NodeJS s\u1ebd gi\u00fap developer t\u1ed1i \u01b0u hi\u1ec7u qu\u1ea3 l\u00e0m vi\u1ec7c.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/","og_locale":"vi_VN","og_type":"article","og_title":"NodeJS l\u00e0 g\u00ec: T\u1ed5ng quan ki\u1ebfn th\u1ee9c NodeJS v\u00e0 Top 5 NodeJS framework","og_description":"NodeJS, hay c\u00f2n vi\u1ebft l\u00e0 Node.js, l\u00e0 m\u1ed9t y\u1ebfu t\u1ed1 then ch\u1ed1t trong l\u1eadp tr\u00ecnh web hi\u1ec7n \u0111\u1ea1i, thay \u0111\u1ed5i c\u00e1ch ch\u00fang ta x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng ph\u00eda m\u00e1y ch\u1ee7 b\u1eb1ng","og_url":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/","og_site_name":"ITviec Blog","article_publisher":"https:\/\/www.facebook.com\/ITviec","article_published_time":"2023-12-04T02:59:03+00:00","article_modified_time":"2024-09-29T15:44:35+00:00","og_image":[{"width":950,"height":500,"url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/NodeJS-blog-vippro.jpg","type":"image\/jpeg"}],"author":"Tuong Uyen","twitter_card":"summary_large_image","twitter_creator":"@ITviec","twitter_site":"@ITviec","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"Tuong Uyen","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"25 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#article","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/"},"author":{"name":"Tuong Uyen","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/e97d0e359f8840eaea7dc3a96006a8d4"},"headline":"NodeJS l\u00e0 g\u00ec: T\u1ed5ng quan ki\u1ebfn th\u1ee9c NodeJS v\u00e0 Top 5 NodeJS framework","datePublished":"2023-12-04T02:59:03+00:00","dateModified":"2024-09-29T15:44:35+00:00","mainEntityOfPage":{"@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/"},"wordCount":6537,"publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"image":{"@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/NodeJS-blog-vippro.jpg","articleSection":["Chuy\u00ean m\u00f4n IT","T\u00e0i li\u1ec7u JS"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/","url":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/","name":"NodeJS l\u00e0 g\u00ec: T\u1ed5ng quan NodeJS v\u00e0 Top NodeJS framework","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#primaryimage"},"image":{"@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/NodeJS-blog-vippro.jpg","datePublished":"2023-12-04T02:59:03+00:00","dateModified":"2024-09-29T15:44:35+00:00","description":"NodeJS, hay Node.js, l\u00e0 runtime environment JavaScript \u0111a n\u1ec1n t\u1ea3ng v\u00e0 ngu\u1ed3n m\u1edf. Hi\u1ec3u r\u00f5 NodeJS s\u1ebd gi\u00fap developer t\u1ed1i \u01b0u hi\u1ec7u qu\u1ea3 l\u00e0m vi\u1ec7c.","breadcrumb":{"@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itviec.com\/blog\/nodejs-la-gi\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#primaryimage","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/NodeJS-blog-vippro.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/12\/NodeJS-blog-vippro.jpg","width":950,"height":500,"caption":"nodejs l\u00e0 g\u00ec - itviec"},{"@type":"BreadcrumbList","@id":"https:\/\/itviec.com\/blog\/nodejs-la-gi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Chuy\u00ean m\u00f4n IT","item":"https:\/\/itviec.com\/blog\/chuyen-mon-it\/"},{"@type":"ListItem","position":2,"name":"NodeJS l\u00e0 g\u00ec: T\u1ed5ng quan ki\u1ebfn th\u1ee9c NodeJS v\u00e0 Top 5 NodeJS framework"}]},{"@type":"WebSite","@id":"https:\/\/itviec.com\/blog\/#website","url":"https:\/\/itviec.com\/blog\/","name":"ITviec Blog","description":"IT Jobs &amp; People in Vietnam","publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itviec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/itviec.com\/blog\/#organization","name":"ITviec","url":"https:\/\/itviec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","width":1800,"height":1800,"caption":"ITviec"},"image":{"@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ITviec","https:\/\/x.com\/ITviec","https:\/\/www.linkedin.com\/company\/itviec","https:\/\/www.youtube.com\/channel\/UCYthAQ3bcGr57M_ag5gHDvQ"]},{"@type":"Person","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/e97d0e359f8840eaea7dc3a96006a8d4","name":"Tuong Uyen","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2022\/10\/tuong-uyen-profile-picture-100x100.jpg","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2022\/10\/tuong-uyen-profile-picture-100x100.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2022\/10\/tuong-uyen-profile-picture-100x100.jpg","caption":"Tuong Uyen"},"url":"https:\/\/itviec.com\/blog\/author\/tuong-uyen-pikachu\/"}]}},"_links":{"self":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/44790","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/users\/95"}],"replies":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/comments?post=44790"}],"version-history":[{"count":0,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/44790\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media\/44896"}],"wp:attachment":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media?parent=44790"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/categories?post=44790"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/tags?post=44790"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}