標籤:style blog http io ar color os 使用 sp
- 什麼是NodeJS。瀏覽器可以解析JS,NodeJS也可以解析JS,它就是一個JS的解析器。瀏覽器利用JS操作DOM,而NodeJS利用JS操作磁碟檔案或搭建HTTP伺服器。NodeJS的作者創造NodeJS的目的是為了實現高效能的Web伺服器,所以他首先看重的是事件機制和非同步IO模型的優越性。
安裝nodejs,可能考本部落格中的 windows下搭建node.js及npm的工作環境 。可再次進行如下測試,在命令列中輸入node
,進行node命令列,輸入console.log(‘Hello World!‘)
,可看到控制台的輸出Hello World!
。也可編寫一名為hello.js
的JS檔案,內容如下: function hello() { console.log(‘Hello World!‘); } hello();
寫好後,在命令列輸入node hello.js
運行,也可看到輸出。 3.模組化。NodeJS中,將JS代碼合理拆分到不同的JS檔案中,一個檔案就是一個模組,而檔案路徑就是模組名。在編寫模組時,有require
、exports
、module
三個預先定義好的變數可供使用。
require :用於在當前模組中載入和使用別的模組,傳入一個模組名,返回一個模組匯出對象。模組名可使用相對路徑(以./開頭),或者是絕對路徑(以/或C:之類的盤符開頭)。另外,模組名中的.js副檔名可以省略。以下是一個例子。 var foo1 = require(‘./foo‘); var foo2 = require(‘./foo.js‘); var foo3 = require(‘/home/user/foo‘); var foo4 = require(‘/home/user/foo.js‘);
// foo1至foo4中儲存的是同一個模組的匯出對象。
另外,可以使用以下方式載入和使用一個JSON檔案。
var data = require(‘./data.json‘);
exports
exports對象是當前模組的匯出對象,用於匯出模組公有方法和屬性。別的模組通過require函數使用當前模組時得到的就是當前模組的exports對象。以下例子中匯出了一個公有方法。
exports.hello = function () { console.log(‘Hello World!‘); };
module
通過module對象可以訪問到當前模組的一些相關資訊,但最多的用途是替換當前模組的匯出對象。例如模組匯出對象預設是一個普通對象,如果想改成一個函數的話,可以使用以下方式。
module.exports = function () { console.log(‘Hello World!‘);};
以上代碼中,模組預設匯出對象被替換為一個函數。
模組初始化:一個模組中的JS代碼僅在模組第一次被使用時執行一次,並在執行過程中初始化模組的匯出對象。之後,緩衝起來的匯出對象被重複利用。
主模組
直接通過命令列參數傳遞給NodeJS以啟動程式的模組被稱為主模組。主模組負責調度組成整個程式的其它模組完成工作。例如通過node main.js
命令啟動程式時,main.js就是主模組。
一個完整樣本
例如有以下目錄。
- F:\hello - util counter.js main.js
其中counter.js內容如下:
var i = 0;function count() { return ++i;}exports.count = count;
該模組內部定義了一個私人變數i,並在exports對象匯出了一個公有方法count。
主模組main.js內容如下:
var counter1 = require(‘./util/counter‘);var counter2 = require(‘./util/counter‘);console.log(counter1.count());console.log(counter2.count());console.log(counter2.count());
運行該程式的結果如下:
$ node main.js123
可以看到,counter.js並沒有因為被require了兩次而初始化兩次。
二進位模組
nodejs即支援命名用JS編寫的模組,也支援使用C/C++編寫二進位模組,但是不要輕易使用二進位模組。
windows下《七天學會NodeJS》學習筆記之一--NodeJS基礎