Node實踐之二

先從一個簡單的demo提及,用cmd打開命令提示符,輸入echo Hello,你們是否是看到終端上顯示出了Hello字樣,事實上這就是一個簡單的事件。node

回到正題,相信提到node.js,免不了讓人想起非阻塞、回調、事件循環、併發、網絡編程等。(在此強調一下併發:許多人同時嘗試作一樣的事情),下面將主要介紹一下node.js的特點功能!web

回調

相信你們到回調應該不陌生,簡單一點的說就是函數能夠做爲參數傳遞給另一個函數中,而後被調用。咱們來看看node.js是如何使用回調的,用例子說話!(哈哈)express

var fs = require('fs');
fs.readFile('somefile.txt', 'utf8', function (err, data) {
    if (err) {
        throw err;
    }
    console.log(data);
});

回調函數中的第一個參數err,用於保存在讀取文件時返回的錯誤。npm

回調函數中的第一個參數err,用於保存讀取文件所返回的數據。編程

 

Node.js以提供一個建立聯網應用程序的平臺爲目標,回調是Node.js實現網絡編程的關鍵方法,由於回調讓代碼在其事件發生的時候才能運行。基於網絡的I/O是不可預測的,事件驅動編程是處理不可預測性的極佳方式,回調產生是負責解決不可預測性的方法,它也是處理併發的高效方法。瀏覽器

回調的相關Demo

一、創建一個app.js,代碼以下服務器

var http = require('http'),
    urls = ['shapeshed.com', 'www.bbc.co.uk', 'edition.cnn.com'];

function fetchPage(url) {
    var start = new Date();
    http.get({ host: url }, function (res) {
        console.log('Got response from:' + url);
        console.log('Request took:' + (new Date() - start) + 'ms');
    });
}

for (var i = 0; i < urls.length; i++) {
    fetchPage(urls[i]);
}

二、運行 node.app   多執行幾回  仔細看結果 從這個例子中我相信你應該可以體會基於網絡的I/O是不可預測的,事件驅動編程是處理不可預測性的極佳方式,回調產生是負責解決不可預測性的方法,它也是處理併發的高效方法網絡

事件循環

Node.js運行在單一的進程中而且要求開發人員使用異步編碼風格。(同步和異步的概念在此不贅述了)併發

網絡常常不是開發人員所能控制的,咱們可能要從不屬於咱們的遠程服務器獲取代碼並處理,經過使用異步風格可讓腳本在網絡事件返回時響應。app

事件循環使得系統能夠將回調函數先保存起來,然後當事件在未來發生時再運行。

事件循環的關鍵思想是將代碼圍繞着事件來構架而不是按照期待中的輸入順序來構架,因爲事件循環以單一進程爲基礎,因此爲了確保高性能,須要遵循如下一些規則:

  • 函數必須快速返回
  • 函數不得阻塞
  • 長時間運行的操做必須移到另外一個進程中

HTTP

網絡編程免不了要了解一下HTTP,事實上它定義了服務器與客戶端在通訊時應該如何發送和接收數據。經過使用HTTP模塊的低級應用程序編程接口,Node.js既容許咱們建立服務器也容許咱們建立客戶端。

講到http,你們天然而然的會想到URL。看一段代碼。

var http = require('http'),
    url = require('url');

http.createServer(function (request, response) {
    var pathname = url.parse(request.url).pathname;
    
    if (pathname === '/') {
        response.writeHead(200, { 'Content-Type': 'text/plain' });
        response.end('Home Page !  ');
    } else {
        if (pathname === '/about') {
            response.writeHead(200, { 'Content-Type': 'text/plain' });
            response.end('About Us !  ');
        } else {
            if (pathname === '/redirect') {
                response.writeHead(301, { 'Location': '/' });
                response.end();
            } else {
                response.writeHead(404, { 'Content-Type': 'text/plain' });
                response.end('Page not found !  ');
            }
        }
    }

}).listen(3000, '127.0.0.1');

console.log(' change!');

運行以後,打開瀏覽器訪問http://127.0.0.1:3000

            http://127.0.0.1:3000/about

            http://127.0.0.1:3000/redirect

            http://127.0.0.1:3000/hello

看到的結果各不同,這就是路由起的效果。

在你們眼裏,彷佛HTML客戶端就是瀏覽器,事實上HTML客戶端能夠是任何對服務器請求響應的東西。

看了上面的代碼可能你們會很困惑,我用Node.js須要瞭解那麼多HTTP裏面的細節,會不會太麻煩了,下面Express粉墨登場了。

Express

簡單一點的一句話介紹Express就是Node.js的一個Web框架。

使用npm install -g express命令來安裝Express(友情提示:這裏使用了-g是由於咱們是用的全局安裝)

建立一個基礎的Express站點

一、打開終端,輸入express [siteName](注意這裏的siteName是你自定義的網站名稱)

二、cd siteName && npm install

三、node app

四、打開web瀏覽器,輸入http://127.0.0.1:3000/

相關文章
相關標籤/搜索