Node.js 學習筆記(三)

global

JS在瀏覽器中的全局對象是window對象。在Node.js環境中,全局對象則叫global。咱們能夠用它來區分當前JavaScript的執行環境:node

if(typeof(window)==='undefined'){
  console.log('node.js');
}else{
  console.log('browser');
}

process

process是Node.js提供的一個對象,它表明當前Node.js的進程。ajax

JavaScript程序是由事件驅動執行的單線程模型,Node.js也不例外。Node.js不斷執行響應事件的JavaScript函數,直到沒有任何響應事件的函數能夠執行,Node就退出了。數組

nextTick方法

此方法能夠在下一次事件響應中執行代碼。瀏覽器

fs模塊

fs模塊是Node.js的內置模塊,是負責處理讀寫文件的。它同時提供了異步和同步方法。異步

異步和同步

異步是在JS執行IO操做時,無需等待執行結果,而是傳入回調函數後,繼續執行下面的代碼,以jQuery的getJSON()爲例:函數

$.getJSON('http://example.com/ajax',function(data){
  console.log('IO結果返回後執行……');
});
console.log('不等待IO結果直接執行後續代碼‘);

而同步則是線形的,須要等待IO操做返回結果後,再執行後續代碼:
var data=getJSONSync('http://example.com/ajax');ui

同步代碼更少,可是異步在實際的用戶體驗更好。編碼

異步讀文件

如下是一個異步讀取文本文件的實例:線程

‘use strict';

var fs=require('fs');

fs.readFile('sample.txt','utf-8',function(err,data){
    if(err){
        console.log(err);
    }else{
        console.log(data)
    }
})

要注意的是,sample.txt必須在當前的目錄之下,且文件的編碼格式爲utf-8。code

若是咱們要讀取的是二進制文件呢?下面是一個讀取圖片的例子:

'use strict';

var fs = require('fs');

fs.readFile('sample.png', function (err, data) {
    if (err) {
        console.log(err);
    } else {
        console.log(data);
        console.log(data.length + ' bytes');
    }
});

當讀取二進制文件時,不傳入文件編碼(如utf-8)時,data會返回一個Buffer對象。

這裏提一下 Buffer對象,它是Node處理二進制數據的一個接口,也是Node原生的全局對象,能夠直接使用,不須要 require(‘buffer’)。它的做用相似於數組。

同步讀文件

同步讀文件相比異步讀文件,只是在readFile上加了一個sync,看下面的例子:

'use strict'

var fs=require('fs');
try{
  var data=fs.readFileSync('sample.txt','utf-8');
  console.log(data);
}
catch(err){
  //錯誤信息
}

若是發生錯誤,只能經過try...catch捕獲。

寫文件

經過fs.writeFile()實現。

'use strict'

var fs=require('fs');

var data='Hello Node.js!';
fs.writeFile('output.txt',data,function(err){
  if(err){
    console.log(err);
  }else{
    console.log('ok');
  }
});

和讀文件相同,writeFile()也有一個同步方法writeFileSync()

'use strict';
var fs=require('fs');

var data='hello Node.js';
fs.writeFileSync('output.txtx',data);

stat

能夠經過fs.stat()獲取文件大小、建立時間等信息。它會返回一個stat對象,告訴咱們文件的詳細信息。

'use strict';

var fs=require('fs');
fs.stat('sample.txt',function(err,stat){
  if(err){
    console.log(err);
  }else{
    // 是不是文件:
        console.log('isFile: ' + stat.isFile());
        // 是不是目錄:
        console.log('isDirectory: ' + stat.isDirectory());
        if (stat.isFile()) {
            // 文件大小:
            console.log('size: ' + stat.size);
            // 建立時間, Date對象:
            console.log('birth time: ' + stat.birthtime);
            // 修改時間, Date對象:
            console.log('modified time: ' + stat.mtime);
        }
    }
});

一樣,它也有一個同步函數statSync()

'use strict';

var fs=require('fs');
var stats=fs.statSync('sample.txt');

console.log(stats.isFile());     //true
相關文章
相關標籤/搜索