測試環境為 CentOS 8 x86_64
Node.JS 所需套件須透過 npm 來下載,所以必須安裝 npm (Node Package Manager) 套件.
[root@localhost ~]# yum install -y nodejs [root@localhost ~]# yum install -y npm
檢視一下 Node.JS 與 npm 版本.
[root@localhost ~]# node -v v10.23.1 [root@localhost ~]# npm -v 6.14.10
測試一下 Node.js 是否可以常運作.使用 Node.js 官方網站程式範例 https://nodejs.org/en/about/
[root@localhost ~]# vi Node.js const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
程式說明:
-
const http = require('http');
- const
變數宣告 ( let , var 也是變數宣告,但這3種使用上略微不同) . - require
透過 require 去載入模組.並把得到的 屬性,函式(函數 Function)或是物件 儲存到變數. - require(‘http’)
去呼叫 Node.js 內建模組 HTTP, 該模組允許 Node.js 通過 HTTP 傳輸資料.
- const
-
const hostname = '127.0.0.1'; const port = 3000;
宣告 2 個變數 hostname (‘ ‘ 表示為字串)與 port (數字).
-
const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); });
第一次看到這個語法,完全不懂是在寫什麼.大概可以區分成以下2塊.
- http.createServer 函式本身
http.createServer([options][, requestListener]) 函式用來建立一個 HTTP 伺服器.需要 requestListener 參數,可以使用 server.listen 函數(如前範例)來定義,或是直接在最後加上 .listen(Port Number).const http = require('http'); const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); }).listen(3000);
- (req, res) => { … } 函數
下面這一段,就是要傳給 http.createServer 函數的 options,但以 箭頭函式運算式(Arrow Function Expression)類似 Function 語法 的方式傳入(函數的傳入值可以是另外一個自訂函數).(req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); }
我們可以把它看成 function (req, res) { … } ,不過與 箭頭函式運算式 使用上略微不同.
function (req, res) { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); }
{ … } 裡面是用來處理 客戶端向 http server 發送過來的請求 req(require : 請求物件) ,以及回應 res(respone : 響應物件).
- res.statusCode = 200;
response.statusCode = 200 代表成功的 HTTP 標準回應請求. - res.setHeader(‘Content-Type’, ‘text/plain’);
response.setHeader(name, value) , 代表 Content-Type : text/html , 回傳值為 text 或是 html . - res.end(‘Hello World’);
response.end([data[, encoding]][, callback]),完成發送請求.
通常寫法會用 res.write + res.endres.write('Hello World'); res.end();
當有多種 req(require : 請求物件) 可以用 if else 來完成,或是使用另外一個 Express 模組來處理 – TBD .
const http = require('http'); var server=http.createServer((req,res) => { if(req.url=='/'){ res.writeHead(200,{'Content-Type':'text/html'}); res.write('Main Page'); res.end(); }else if(req.url=='/1'){ res.writeHead(200,{'Content-Type':'text/html'}); res.write('Page 1'); res.end(); }else if(req.url=='/2'){ res.writeHead(200,{'Content-Type':'text/html'}); res.write('PAge 2'); res.end(); }else res.end('Invalid Request!'); }).listen(3000);
執行結果.
[root@localhost ~]# curl http://127.0.0.1:3000 Main Page [root@localhost ~]# curl http://127.0.0.1:3000/1 Page 1 [root@localhost ~]# curl http://127.0.0.1:3000/2 PAge 2
函數, 更多關於 HTTP 請參考 – https://nodejs.org/dist/latest-v4.x/docs/api/http.html
- res.writeHead
response.writeHead(statusCode[, statusMessage][, headers]) - res.write
response.write(chunk[, encoding][, callback]) - res.end
response.end([data[, encoding]][, callback])
- http.createServer 函式本身
-
server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
- server.listen([port][, hostname][, backlog][, callback])
指定 http port 與 hostname. - console.log(`Server running at http://${hostname}:${port}/`);
console.log([data][, …args]) ,Console 模組提供了一個簡單的 Debugging 資訊在標準輸出並加上換行 newline 來顯示.
- server.listen([port][, hostname][, backlog][, callback])
Node.JS Hello World 程式已經寫好,可以透過 Node 來測試一下.
[root@localhost ~]# node Node.js & [1] 7508 Server running at http://127.0.0.1:3000/
Node.JS Hello World 這程式就在 http://127.0.0.1:3000/ 等待被連線,可以透過 Firefox , Chrome …瀏覽器或是指令版的 curl 瀏覽器來檢視(最簡單快速)
[root@localhost ~]# curl http://127.0.0.1:3000/ Hello World
可以看到 Hello World 就代表 Node.JS 無誤.
不用時就可以殺除該 Node.JS .
[root@localhost ~]# ps -aux | grep -i node root 7508 0.2 0.8 569892 34012 pts/1 Sl 23:52 0:00 node Node.js root 7527 0.0 0.0 9208 1068 pts/1 S+ 23:52 0:00 grep --color=auto -i node [root@localhost ~]# kill 7508 [root@localhost ~]# ps -aux | grep -i node root 7601 0.0 0.0 9208 1068 pts/1 R+ 00:00 0:00 grep --color=auto -i node [1]+ Terminated node Node.js