基本模塊
因為Node.js是運行在服務器端的JavaScript環境,服務器環境和瀏覽器程序相比,最大的特點就是沒有瀏覽器的安全限制了,而且,服務器程序必須能接收網絡請求,讀寫文件,處理二進制內容,所以
Node.js內置的常用模塊就是為了實現基本的服務器功能,這些模塊在瀏覽器環境中是無法被執行的,因為她們的底層代碼是用C/C++在Node.js運行環境中實現的.
Global
在前面的JavaScript課程中,我們已經知道,JavaScript有且僅有一個全局對象,在瀏覽器中,叫window對象,而在Node.js環境中,也有唯一的全局對象,但不叫window,而叫global
這個對象的屬性和方法也和瀏覽器環境的window不同,進入Node.js交互環境,可以直接輸入:
process
process 也是Node.js提供的一個對象,它代表當前的Node.js進程,通過Process對象可以拿到許多有用信息:
> process === global.process;
true
> process.version;
'v5.2.0'
> process.platform;
'darwin'
> process.arch;
'x64'
> process.cwd(); //返回當前工作目錄
'/Users/michael'
> process.chdir('/private/tmp'); // 切換當前工作目錄
undefined
> process.cwd();
'/private/tmp'
JavaScript程序是由事件驅動執行的單線程模型,Node.js也不例外,Node.js不斷執行響應事件的JavaScript函數,直到沒有任何響應事件的函數可以執行時,Node.js就退出了
如果我們想要在下一次事件響應中執行代碼,可以調用process.nextTick():
process.nextTick(function(){
console.log('nextTick callback!');
});
console.log('nextTick was set!');
用Node執行上面的代碼node test.js,你會看到,打印輸出是:
nextTick was set!
nextTick callback!
這說明傳入process.nextTick()的函數不是立刻執行,而是要等到下一次事件循環
Node.js進程本身的事件就是由process對象來處理,如果我們響應exit事件,就可以在程序即將退出時執行某個回調函數:
// 程序即將退出的回調函數
process.on('exit',function(code){
console.log('about to exit with code:' + code);
});
判斷JavaScript執行環境
有很多JavaScript代碼既能在瀏覽器中執行也能在Node環境中執行,但有些時候,程序本身需要判斷自己到底是在什么環境下執行的,常用的方式就是根據瀏覽器和Node提供的全局變量名稱來判斷
//判斷JavaScript執行環境
if (typeof(window) === 'undefined') {
console.log('node.js');
} else {
console.log('browser');
}