歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Node.js基礎教程學習筆記

Node.js是用C++語言開發,能運行JavaScript語言的環境。

使用的時候格式為node helloworld.js,helloword.js為服務器端或者系統級端的javascript代碼。

Node有很多特性,這裡不再一一展開。先用node創建一個http服務器監聽固定端口:

var http = require('http');

http.createServer(function (req, res) {

res.writeHead(200, {'Content-Type': 'text/plain'});

res.end('Hello World\n');

}).listen(80, "127.0.0.1");

簡單解釋:創建一個簡單的http服務器,箭筒80端口。對於任何的http請求,服務器返回頭部狀態碼為200,content-type值為text/plain的hello world的文字響應。

簡單來說,此時用浏覽器訪問指定端口,會有相應的響應。 

在createserver函數的參數中有一個回調函數,當有http請求的時候,node就調用這個回調函數處理請求並實現響應。

在介紹javascript閉包特性的時候,有這樣一段代碼應當引起重視:(另外關於函數的閉包,之後會更深入的研究,謹記!)

var hostRequest = http.request(requestOptions,function(response) {

var responseHTML ='';

response.on('data', function (chunk) {

responseHTML = responseHTML + chunk;

});

response.on('end',function(){

console.log(responseHTML);

// do something useful

});

 });

簡單解釋:上面的代碼要用end事件處理responseHTML變量,根據函數閉包的特性,可以在兩個回調函數之外定義responseHTML變量然後再data事件中根據需要修改這個變量的值,並且送到end事件中執行。

--------------------------------------分割線 --------------------------------------

Ubunru 12.04 下Node.js開發環境的安裝配置 http://www.linuxidc.com/Linux/2014-05/101418.htm

Node.Js入門[PDF+相關代碼] http://www.linuxidc.com/Linux/2013-06/85462.htm

Node.js開發指南 高清PDF中文版 +源碼 http://www.linuxidc.com/Linux/2014-09/106494.htm

Node.js入門開發指南中文版 http://www.linuxidc.com/Linux/2012-11/73363.htm

Node.js安裝與配置 http://www.linuxidc.com/Linux/2013-05/84836.htm

Ubuntu 編譯安裝Node.js http://www.linuxidc.com/Linux/2013-10/91321.htm

--------------------------------------分割線 --------------------------------------

Node.js的模塊機制:

Javascript的缺陷:

沒有模塊系統;沒有原生的支持密閉作用域或依賴管理。

沒有標准庫;除了一些核心庫之外,沒有文件系統的API。

沒有標准接口;沒有數據庫的統一接口;

沒有包管理系統;不能自動加載和安裝依賴。

於是有了CommonJS規范的出現。於是node.js就成了這種規范的實現者。

Node.js用require機制可以實現對文件的調用:在require這個文件之後,定義在exports對象上的方法便可以隨意調用。

舉例如下:

var PI = Math.PI;

exports.area = function (r) {

 return PI * r * r;

};

exports.circumference = function (r) {

 return 2 * PI * r;

};

這個文件存儲為xx.js文件,在app.js文件中用require調用:var circle = require('./xx.js');,之後就可以使用xx.js中的以exports開頭的函數。

舉例如下(app.js):

var circle = require('./xx. js');

console.log( 'The area of a circle of radius 4 is ' + circle.area(4));

最後一句中的circle.area(4)就是在調用事先在xx.js中定義的

exports.area = function (r) {

 return PI * r * r;

};

這個函數。最後采用字符串的拼接完成The area of a circle of radius 4 is 50.26548245743669的顯示。

這裡有一個問題:為什麼我沒在app.js中定義require這個變量,但是能正常使用不報錯?

原因我們從輸入node app這個口令後說起。
在你砸下enter之後,編譯器開始包裝這個app.js這個文件,包裝之後的這個文件變成:

(function (exports, require, module, __filename, __dirname) {

var circle = require('./app.js');

console.log('The area of a circle of radius 4 is ' + circle.area(4));

});

原來的兩句變成了三句,成為了一個函數,並且還有五個參數。

這段包裝好之後的代碼有一個類似eval的工具執行,返回一個具體的function對象,最後傳入module對象的這五個參數(或方法),作為實參並執行。

所以,在app.js中並沒有定義exports,但是這個方法還是存在的原因。在這個文件中,可以繼續用require來引用新的模塊執行新的功能,事實上require調用的是load方法。

load方法在載入、編譯、緩存了module後,返回module的exports對象。這就是xx.js文件中只有定義在exports對象上的方法才能被外部調用的原因。

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-11/109199p2.htm

Copyright © Linux教程網 All Rights Reserved