編寫一個(gè)程序,執(zhí)行一個(gè)異步的對文件系統(tǒng)的操作:讀取一個(gè)文件,并且在終端(標(biāo)準(zhǔn)輸出stdout)打印出這個(gè)文件中的內(nèi)容的行數(shù)。類似于執(zhí)行 cat file | wc -l 這個(gè)命令。 所要讀取的文件的完整路徑會在命令行第一個(gè)參數(shù)提供。
解決這個(gè)問題將需要用到Node.js最鮮明的風(fēng)格的方式:異步。
‘’’fs.readFile()’’’方法可以滿足這個(gè)需求,這需要從傳入的回調(diào)函數(shù)中去收集數(shù)據(jù)(這些數(shù)據(jù)會作為第二參數(shù)傳遞給回調(diào)函數(shù)),而不是使用方法的返回值。
記住,Node.js 回調(diào)函數(shù)都有像如下所示的特征:
function callback (err, data) { /* ... */ }
可以通過檢查第一個(gè)參數(shù)的真假值來判斷是否有錯(cuò)誤發(fā)生。如果沒有錯(cuò)誤發(fā)生,第二個(gè)參數(shù)將獲取到一個(gè)Buffer對象。和 readFileSync() 一樣,可以傳入 ‘utf8 ‘ 作為它的第二個(gè)參數(shù),然后把回調(diào)函數(shù)作為第三個(gè)參數(shù),這樣,得到的將會是一個(gè)字符而不是 Buffer。
var fs = require('fs');
fs.readFile(process.argv[2], function(err,data){
if(err) throw err;
console.log(data.toString().split('\n').length-1);
});
更多建議: