phanduc0908

Basic 'Express-less'

Sep 23rd, 2018
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ---
  2. title : "Express-less" cơ bản trong Node Server - HTTP calss
  3. author : DucPV
  4. ---
  5. [Link Bài viết gốc](https://www.codementor.io/sagarmunjal/basic-express-less-node-server-http-calls-nh07esgsf)
  6. >Đây là bài đăng khá đầy đủ về JavaScript, dành cho những người gặp phải vấn đề về font-end. Bài viết dành cho những bạn mới bắt đầu code hoặc mới chỉ code phần font-end. Những bạn có kiến thức cơ bản về Javascript có thể lướt qua phần hướng dẫn và đi thẳng vào các phần dưới đây:
  7. ##### Bạn cần thiết lập những gì
  8. ##### Cài đặt Node
  9. ##### Package.Json
  10. ##### https Server
  11. ##### Tạo một server nhỏ của riêng mình
  12. ##### Truy vẫn URL
  13. ##### Cài đặt dependency mới
  14. ##### Xây dựng một ứng dụng
  15.  
  16.  
  17. ## Bạn cần thiết lập những gì
  18. -Bạn sẽ chạy trên chính máy của bạn và cần phải cần thiết lập
  19. *Terminal / Command prompt
  20. *Code Editer: Phổ biến : Visual Studio Code, Subline Text ...
  21. ## Cài đặt Node
  22. -Chúng ta tải về Node phiển bản mới nhất theo hệ điều hành của máy ( window, Mac, Linux) theo đường link dưới đây
  23. [Node](https://nodejs.org/en/)
  24. - Sau đó để kiểm tra xem bạn đã cài đặt thành công hay chưa hoặc kiểm tra phiên bản của Node bằng cách chạy hai câu lệnh sau trên _Terminal_ hoặc _Command prompt_
  25. ```
  26. node -v
  27. npm -v
  28. ```
  29. Kết quả trả về sẽ như sau:
  30. ![](https://process.filestackapi.com/cache=expiry:max/IWXxh5UTVW86rYEjiCpw)
  31. Node đi cùng các lệnh cấu hình sau:
  32. __npm init__ : Khởi tạo ứng dụng Node.js và tạo file __package.json__
  33. __npm install <package>.__ : Cài đặt gói Node.js
  34. __npm publish__ : Lưu và tải lên package mà bạn muốn chia sẻ lên cộng đông _npm package_
  35. __npm start__ : Chạy ứng dụng NodeJs
  36. __npm stop__ : Dừng ứng dụng
  37.  
  38. ## package.json
  39. __package.json__ là file chứa các cấu hình cơ bản. Chúng ta có thể tạo ra bằng cách dùng lệnh __npm init__ hoặc tạo file __package.json__ bằng tay.
  40. Bước tiếp theo chúng ta sẽ tạo file package.json riêng cho mình. Hướng dẫn sau sẽ tải __Node__ như một project dependency
  41. -Bắt đầu các hướng dẫn dưới đây:
  42. * Đầu tiên bạn phải chắc chắn rằng bạn đang ở đường dẫn chứa project của mình và chạy lệnh dưới đây bằng terminal hoặc command prompt
  43. * Tạo một file đặt tên là : __package.json__
  44. * Copy tất cả đoạn code dưới đây vào file bạn vừa tạo
  45. ```
  46. {
  47.   "name": "simple-node-application",
  48.   "version": "1.0.0",
  49.   "description": "A small node application",
  50.   "main": "index.js",
  51.   "scripts": {
  52.     "start": "node index.js"
  53.   },
  54.   "dependencies": {
  55.     "node": "10.10.0"
  56.   },
  57.   "keywords": []
  58. }
  59. ```
  60. * Chạy lệnh __npm install__ trong terminal của bạn
  61. ![](https://process.filestackapi.com/cache=expiry:max/ubgDSUgNQ6WFAhunjjEv)
  62. ## https server
  63. - Phần này bao gồm nhưng hàm cơ bản của __http module__ một thư viện Node.js được sử dụng để xử lý yêu cầu trên internet. Qua một bài bước cơ bản, bạn sẽ chuyển các dòng lện Javascript thành một máy chủ mà bạn giao tiếp trên trình duyệt của mình
  64. - Hai hàm cơ bản nhất __http methods__ là: __POST__ và __GET__
  65.  __GET__ : Phương thức này dùng để yêu cầu thông tin từ máy chủ. Thông thường, máy chủ sẽ trả lời lại với nội dung mà người dùng có thể nhìn thấy trên trang của mình.
  66. __POST_ : Phương thức này để gửi thông tin lên server. Server có thể trả về một trang HTML hoặc dẫn đến một trang khác sau khi sử lý dữ liệu của bạn
  67.  
  68. ## Tạo một server nhỏ của riêng mình
  69. -Thấy tất cả các thay đổi trước tại đây, Các hướng dẫn dưới đây chạy một server
  70. * Tạo một file index.js sẽ chứa các code
  71. * copy đoạn code dưới đây vào index.js
  72. ```
  73. const http = require('http');
  74.  
  75. const app = http.createServer((request,response) => {
  76.   console.log('server is running...')
  77. })
  78.  
  79. app.listen(3000);
  80. ```
  81. * Chạy lệnh __npm start__
  82. * Mở trình duyệt và nhập vào đường dẫn __localhost:3000__
  83. Bạn sẽ thấy kết quả là __server is running...__ có nghĩa là file index.js của bạn đã chạy thành công
  84. -Cùng hiểu xem những gì chúng ta đã làm
  85. + Import http . Biến __app__ là đối tượng tham chiếu được trả về bởi hàm __createServer()__
  86. + Chúng ta xoay quanh hai tham số _req_ và _res_ được truyền vào trong __createServer()__ . Đây là hai đối số được gửi đến đối tượng server
  87. + Cuối cùng, chúng ta sử dụng phương thức __listen__ để chạy server
  88. + listen(/* port number */) là port mà server sẽ chạy trên đó
  89. + Trình duyệt sẽ truy cập qua đường dẫn: localhost:3000
  90.  
  91. ## url query
  92.  
  93. Thay đổi file __index.js__ :
  94. ```
  95. const http = require('http');
  96. const url = require('url');
  97.  
  98. const app = http.createServer((request,response) => {
  99.     var querystring
  100.     querystring = url.parse(request.url,true).query;
  101.     if (querystring) {
  102.         response.writeHead(200, {"Content-Type": "text/html"});
  103.         console.log('the index.js has loaded')
  104.         response.write(`<h1>The parsed value from the url is ${querystring.value}</h1>`);
  105.         response.end();
  106.     }
  107.    
  108.     else {
  109.         response.write(`<h1>No values were passed</h1>`);
  110.         response.end();
  111.     }
  112.  
  113. })
  114.  
  115. app.listen(3000);
  116. ```
  117. Chạy lại chương trình, nhập lại đường dẫn : _http://localhost:3000/?value=xenobia_
  118. Bạn sẽ thấy giá trị xenobia được in ra
  119. Cùng hiểu những gì đã xay ra :)
  120. + Ở ví dụ trước chúng ta import một http mới để phân tích URL
  121. + Import module url và lưu nó bằng biến url
  122. + Bên trong hàm của biến app chúng ta dùng phương thức __url.parse__ : dùng để phân tích và lưu trữ đối tượng
  123. + Giá trị trả về từ __url.parse(request.url,true).query__ được lưu trong biến querystring.
  124. + Để truy cập vào biến đó ta sử dụng : __querystring.value__
  125.  
  126. ## Tải thêm module mới
  127.  
  128. Thay đổi file index.js và tạo file module.js
  129.  
  130. ```
  131. /* index.js */
  132. const http = require('http');
  133. const url = require('url');
  134. const newModule = require('./module.js');
  135.  
  136. const app = http.createServer((request,response) => {
  137.     var querystring
  138.     querystring = url.parse(request.url,true).query;
  139.     if (querystring.value) {
  140.         response.writeHead(200, {"Content-Type": "text/html"});
  141.         console.log('the index.js has loaded')
  142.         response.write(`<h1>The parsed value from the url is ${querystring.value}</h1>`);
  143.         response.end();
  144.     }
  145.    
  146.     else {
  147.         response.write(`<h1>No values were passed check your terminal/command prompt for log message.</h1>`);
  148.         newModule.addlog();
  149.         response.end();
  150.     }
  151.  
  152. })
  153.  
  154. app.listen(3000);
  155. ```
  156.  
  157. ```
  158. /* module.js */
  159. exports.addlog = () => {
  160.     console.log(` module.js has loaded`)
  161. }
  162. ```
  163. Chạy lại ứng dụng bạn sẽ thấy file module.js đã được load
  164.  
  165. ## Cài đặt dependency mới
  166.  
  167. Dependencies là Javascript module mà bạn có thể tải về project của bạn __npm install --save node__. Sau đó, bạn có thể import vào project của bạn với cúa pháp :
  168. ```
  169. const moduleName = require('package name');
  170. ```
  171. Trong quá trình phát triển với NodeJs, bạn sẽ nghe thấy module và package, dưới đây là những điều mà bạn cần biết
  172. + Modules là file riêng biệt chứa các đoạn mã liên quan đến một khái niệm, chức năng hay thư viện
  173. + Package có thể chứa 1 hoặc nhiều modules. Package nhóm các file có công cụ liên quan đến nhau
  174. NODE : "Dependencies" là NodeJs module được dùng bởi một ứng dụng hoặc các module khác
  175. Nếu bạn để ý rằng, trong file package.json sẽ chứa tất cả các dependency
  176. Minh họa :
  177. Cài đặt một npm module mới tên là : __cities__
  178. ```
  179. npm i --save "cities"
  180. ```
  181. sau đó vào file package.json:
  182. ```
  183. {
  184.   "name": "simple-node-application",
  185.   "version": "1.0.0",
  186.   "description": "A small node application",
  187.   "main": "index.js",
  188.   "scripts": {
  189.     "start": "node index.js"
  190.   },
  191.   "dependencies": {
  192.     "cities": "^1.1.2",
  193.     "node": "10.10.0"
  194.   },
  195.   "keywords": []
  196. }
  197. ```
  198.  
  199. ## Xây dựng một ứng dụng
  200.  
  201. Ứng dụng này sẽ hiện thị tên thành phố dựa trên zip code
  202.  
  203. Thay đổi file __module.js__
  204.  
  205. ```
  206. /* module.js */
  207. const cities = require('cities');
  208.  
  209. exports.addlog = () => {
  210.     console.log(` module.js has loaded`)
  211.     var myCity = cities.zip_lookup(10016);
  212.     console.log(myCity);
  213. }
  214. ```
  215. Chạy lại chương trình bạn sẽ thấy thông tin về zip code là 10016 trên terminal :
  216.  
  217. ```
  218. {
  219.   zipcode:10016,
  220.   state_abbr: ’NY’,
  221.   latitude:40.746180,
  222.   longitude:-73.97759,
  223.   city: ’New York’,
  224.   state: ’New York’
  225. }
  226. ```
  227. Chúng ta sẽ tìm thông tin các thành phố khác dựa trên zip code từ URL
  228. Tạo một hàm __findcityname(zip)__ có tham số là zip => sẽ trả về thành phố có zip code = zip
  229. Thay đổi file module.js
  230. ```
  231. const cities = require('cities');
  232.  
  233. exports.findcityname = (zip) => {
  234.     return cities.zip_lookup(zip).city;
  235. }
  236.  
  237. exports.addlog = () => {
  238.     console.log(` module.js has loaded`)
  239. }
  240. ```
  241. Sau đó thay đổi file index.js
  242. ```
  243. const http = require('http');
  244. const url = require('url');
  245. const newModule = require('./module.js');
  246.  
  247. const app = http.createServer((request,response) => {
  248.     var querystring,zip;
  249.     querystring = url.parse(request.url,true).query;
  250.     zip = querystring.value
  251.     if (zip) {
  252.         response.writeHead(200, {"Content-Type": "text/html"});
  253.         console.log('the index.js has loaded')
  254.         response.write(`<h1>${querystring.value} is the zip code for ${newModule.findcityname(zip)} <br> </h1>`);
  255.         response.end();
  256.     }
  257.    
  258.     else {
  259.         response.write(`<h1>No values were passed check your terminal/command prompt for log message.</h1>`);
  260.         newModule.addlog();
  261.         response.end();
  262.     }
  263.  
  264. })
  265.  
  266. app.listen(3000);
  267. ```
  268. Chạy lại chương trình và xem kết quả:
  269. ![](https://process.filestackapi.com/cache=expiry:max/0a9fG30ZQHXX5yA12oQw)
Add Comment
Please, Sign In to add comment