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