Node.js入門簡介
作者:Chengyu
Node.js本身就是一門新興的語言失暴,由于語言輕便,并且具有較為強大的前端編程能力微饥,所以近期廣泛被用于抓取數(shù)據(jù)的領(lǐng)域逗扒。至于其他方面,由于在下接觸也并不多并不能給予充分地評價欠橘。
乾為始 --node.js的下載與使用
Node.js的下載與安裝矩肩,詳見nodejs.org/。相信項目組的各位都是計算機的精英這個應該不是問題肃续。至于運行黍檩,只需在terminal端(win可以是Cygwin或者其他)輸入
node 文本名稱
萬事俱備叉袍,只欠東風 --node.js的require構(gòu)架
在nodejs中幾乎每次開頭都必須要加上或多或少的require的請求,就本人見解可以通俗的理解為“#include”在C中的作用刽酱,也就是引用庫/API喳逛。
話不多說,直接上“hello world”的一段代碼:
var http = require('http');
server = http.createServer(function (req, res) {
res.writeHeader(200, {"Content-Type": "text/plain"});
res.end("Hello World\n");
});
server.listen(8000);
console.log("httpd start @8000");
輸出結(jié)果:
http調(diào)用了https的庫棵里,server.listen()是打開localhost的port:8000润文,至于console.log()則是輸出在控制器的結(jié)果,類似printf()殿怜。
Ok典蝌,到此恭喜大家已經(jīng)寫好了第一個nodejs的程序~
生非異,假于物 --node.js API的使用
使用Nodejs的一大原因是由于其強大的API头谜,坐擁這些API可以處理很多不可思議的事情骏掀。在此,推薦一個非常好用的網(wǎng)站:www.npmjs.com/乔夯。
這網(wǎng)站到底有多強大呢砖织,舉個例子。比如你想獲取近期未來和過去的天氣末荐,你可以從零自己構(gòu)寫一個抓取網(wǎng)頁的js程序侧纯,然后執(zhí)行抓取對應網(wǎng)頁的數(shù)據(jù)。復雜點甲脏,可能數(shù)據(jù)不再同一個頁面眶熬,你要用call back或者loop去“進入”不同的網(wǎng)頁抓取所有所需數(shù)據(jù),畢竟數(shù)據(jù)量很大块请,但是每一次樓一兩個到后期差距會很大的娜氏。聽到這里各位肯定會發(fā)現(xiàn)工程量的巨大,可以使npm可以幫助大家輕松地完成這些事情墩新。你所需做的就是找到相應weather的API然后下載并且看完教程如何使用贸弥,接著就只需改改每次運行的所要求時間和位置,便可直接獲得數(shù)據(jù)海渊。
(PS:據(jù)本人經(jīng)歷绵疲,大部分API所獲取數(shù)據(jù)都是來自JSON)
曲徑通幽處 --node.js讀取文本和輸出文本
處理大數(shù)據(jù),一般和文本分不開干系臣疑,所以這里幫助大家學習一下文本的處理盔憨。
讀取文本:
var fs = require('fs');
var iconv = require('iconv-lite');
var fileStr = fs.readFileSync('
file name', {encoding:'binary'});var buf = new Buffer(fileStr, 'binary');
var str = iconv.decode(buf, 'GBK');
console.log(str);
如此在terminal上輸出的就是讀取文本的所有內(nèi)容。(fs, iconv-lite需在npm自行下載)
注意:這里讀取出的時原封不動的文本內(nèi)容讯沈,后期要用RegExp進行處理郁岩,在此就不想洗論述,如果需求,在下以后可以寫些externsion问慎。
輸出文本:
var fs = require('fs');
var iconv = require('iconv-lite')
var header = "
head\n";? ? ? //make file headervar filename = "
file name" + ".csv"; ? ?//file namefs.appendFile(filename, header,?function (err){ ? ? ?//three parameters, which one is func.
if (!err){
console.log("------------ saved header to:" + filename);
var filedata =
first attribue+"," ? ? ? ? //attributes are defined before+
second attribute+ ","+.....+ "\n";
//append attribute to the file
fs.appendFile(filename, filedata,
function (err) {
if (!err) {
console.log("saved data to " + filename);
}
else{
console.log("error" + " " + err);
}
}
);
}
else{
console.log("error" + " " + err);
}
}
);
綜上萍摊,可以將文本保存到叫做“file name”的文本中,格式是csv蝴乔。