Node.js筆記
阿新 • • 發佈:2018-11-19
簡介
nodejs是一個js解析器,類似Python,可以直接執行js檔案或者在互動命令中執行js程式碼,安裝好了nodejs之後只要執行node.exe就能進入互動式環境
模組
require,require類似Python裡面的import,用於將一個模組匯入到當前模組,但是require的使用形式類似函式,使用如下:
main.js
//這一行程式碼引入相同路徑下的tt.js作為一個模組,賦值給變數a
var a=required('./tt');
a.helllo();//輸出hello
console.log(a==a.ex);//輸出true
tt.js
//exports物件是一個模組的匯出物件,上面main.js裡面的
exports.hello=function(){
console.log('hello');
}
exports.ex=function(){
return exports;
}
module,module物件可以在本模組內部訪問到,裡面包含模組的一些資訊,可以通過設定module模組來設定這些資訊,例如替換模組的exports:
module物件例項
Module {
id: 'D:\\workspace\\softwares\\node\\hello.js',
exports: { hello: [Function], md: [Circular] } ,
parent:
Module {
id: '<repl>',
exports: {},
parent: undefined,
filename: null,
loaded: false,
children: [ [Circular] ],
paths:
[ 'D:\\workspace\\softwares\\node\\repl\\node_modules',
'D:\\workspace\\softwares\\node\\node_modules',
'D:\\ workspace\\softwares\\node_modules',
'D:\\workspace\\node_modules',
'D:\\node_modules',
'C:\\Users\\Administrator\\.node_modules',
'C:\\Users\\Administrator\\.node_libraries',
'D:\\workspace\\softwares\\lib\\node' ] },
filename: 'D:\\workspace\\softwares\\node\\hello.js',
loaded: true,
children: [],
paths:
[ 'D:\\workspace\\softwares\\node\\node_modules',
'D:\\workspace\\softwares\\node_modules',
'D:\\workspace\\node_modules',
'D:\\node_modules' ] }
NODE_PATH環境變數,可以通過指定NODE_PATH環境編輯指定包載入的路徑,類似CLASSPATH環境變數。
包和入口模組,通常會將一個資料夾稱為一個包,並且使用包來管理模組,為每一個包設定一個入口模組,在入口模組裡面返回包裡的所有模組:
模組1
exports.create=function(){
return exports;
}
模組2
exports.create=function(){
return exports;
}
入口模組
var m1=require('./m1');
var m2=require('./m2');
var name='module name';
exports.create=function(){
return{
name:name,
m1:m1.create(),
m2:m2.create()
}
}
需要使用的時候只用使用main模組的create方法獲取所有模組的引用就可以了
index.js ,當檔名為index.js的時候require不用寫模組名,下面兩條語句等價
var c= require('/home/user/lib/cat');
var c= require('/home/user/lib/cat/index');
package.json,package.json是定義當前路徑的模組路徑的配置檔案,假如在/path/package.json
裡面寫了這樣的程式碼:
package.json
{
"name":"path",
"main":"./lib/main.js"
}
那麼`require(‘path’)就會匯入path/lib/main.js這個檔案,package.json欄位全解
node.js可以使用read/writeFileSync(path)讀取檔案或寫檔案,這樣會將整個檔案都放到記憶體中間去,node.js使用createRead/WriteStream(path)建立檔案的讀寫流。
讀取的內容可以使用toString()方法轉換成字串。
node.js和java一樣,使用引用控制例項,兩個引用指向同一個例項的時候修改會同時應用到兩個例項。
事件回撥機制
nodejs使用events模組實現事件回撥,即為某一個事件繫結一個handler函式,手動觸發事件呼叫事件處理函式。實現的功能很像c#裡面的時間委託。
//匯入模組
var events=require("events");
//建立時間發射器
var eventEmitter=new events.EventEmitter();
//宣告事件處理函式
var eventHandler=function(){
console.log("test");
}
//繫結處理函式
eventEmitter.on('test',eventHandler);
//可以繫結多個處理函式
eventEmitter.on('test',function(){
console.log('tet');
});
//觸發事件
eventEmitter.emit('test');
利用events實現任務定時排程
//匯入模組
var events=require("events");
//建立時間發射器
var eventEmitter=new events.EventEmitter();
//宣告事件處理函式
var eventHandler=function(){
console.log("test");
}
//繫結處理函式
eventEmitter.on('test',eventHandler);
//可以繫結多個處理函式
eventEmitter.on('test',function(){
console.log('tet');
});
//1000秒觸發事件
function run(){
setTimeout(function(){
eventEmitter.emit('test');
run();
},1000);
}
run();
路徑解析
nodejs的路徑解析模式不是總是在當前目錄搜尋,當前目錄搜尋不到的話會一直向上搜尋,如在/dir1/dir2/test.js
裡面使用如下程式碼require('module')
,則搜尋路徑依次是:
/dir1/dir2/node_modules/module
/dir1/node_modules/module
/node_modules/module
也就是隻要上層目錄裡面有node_modules目錄裡面有這個模組就行