1. 依據本人簡單歸類,NodeJS為一種Service Base的服務引擎框架。簡單來說,用戶不用架設什麼Appache or IIS or Any other Service Server,即可透過Node JS來建立各種服務。

2. 有關於Node JS的安裝,於此恕不累述,請自行Google參考。本系列文採用Node JS,Express JS,Mongo DB與 WebStorm IDE來進行開發。

3. NodeJS語法基本上算與Java Script類似,因此相信入門非常簡便,所以文中亦不討論與Java Script有關的一些簡單常識性問題。

首先我們來看怎樣簡單地掛起一個Http服務:

var http = require('http');
var server = http.createServer();
var listenPort = 8080;
server.listen(listenPort);

簡單來看這段程式碼,首先透過內建的http來呼叫createServer(),來建立一個Service server。 接著指定此Service Server的Listen Port為8080,也就是接聽任何來自8080 Port的reuqest。

當執行此範例時,並不會產生任何執行結果,這是因為我們僅要求監聽來自8080 Port的Request,並未設定任何對應處理。

底下我們稍微改寫程式碼中的createServer()呼叫部分,於其中加入callback()函數,來處理當接收到request時,到底要產生何種對應。

var server = http.createServer(function(req, res) {
    res.end('Test Page');
});

 於圖中可以看到由於在createServer時加入了callback()函數,因此當我們透過任何方式對http://127.0.0.1:8080 送出reqeust的時候,會接收到respone回來的"Test Page"字樣。

NodeJS的工作方式,主要是透過事件驅動來進行處理,因此在NodeJS中我們會大量的用到callback()函數,用以針對各種不同的情況進行對應的處理行為。到底什麼叫做事件驅動呢?這名詞聽起來挺玄的,我們就以一個簡單的概念來講就好,也就是當service server接收到需求時,對應我們所寫的handle來處理不同的狀況。

舉例來說:

var http = require('http');
var server_http = http.createServer(function(req, res) {
    console.log('Get Request---<');
    console.log('Method: ' + req.method);
    console.log('URL: ' + req.url);
    console.log('--->');
});
var listenPort_http = 8080;
server_http.listen(listenPort_http);
console.log('http Start---<');

 

當執行上段程式碼時,並不會去顯示第3~6行的內容,而直接跳至第10行顯示"http Start--<"。

這是因為程式碼的第3~6行是包含在ㄧ個callback的函數內,而此Callback的函數必須等到程式接獲8080 port所傳遞的request時,才會進行觸發行為。

有人可能會問為什麼NodeJS必須做到這麼的煩雜處理?這是因為我們無法了解Server什麼時候,會接獲什麼樣的要求,簡單來說就是一種非同步的狀態。

在創建PHP或ASP等應用時,通常我們不需要去了解這些東西,原因在於IIS或Apache會在接獲request時,自行建立一個thread來呼叫對應的程序處理,因此可以常保持在條列式的同步運算狀態。

而在NodeJS時,由於我們不知道這件事情什麼時候會發生,所以必須定義一個處理request的地方:它就是我們傳遞過去的那個函數。至於它是被預先定義的函數還是匿名函數,就無關緊要了。

最後我們將今天所使用的程式碼,以事件導向處理的精神來重新包裝一下

server-config.js

var http = require('http');
function start() {
    var listenPort_http = 8080;
    function onRequest(req, res) {
        console.log('Get Request---<');
        console.log('Method: ' + req.method);
        console.log('URL: ' + req.url);
        console.log('End Request--->');
    }
    http.createServer(onRequest).listen(listenPort_http);
    console.log('Server Start---<');
}
exports.start = start;

app.js

var server = require('./server-config');
server.start();

執行app.js後結果

 

當於瀏覽器網址列輸入

"http://127.0.0.1:8080/MainPage"

"http://127.0.0.1:8080/Login"

"http://127.0.0.1:8080/Logout"

於主控台輸出Request所帶的url


文章標籤
全站熱搜
創作者介紹
創作者 alexlyblue 的頭像
alexlyblue

低敘呢喃

alexlyblue 發表在 痞客邦 留言(0) 人氣(64)