nodeschool學(xué)習(xí)

安利一個學(xué)習(xí)node.js的網(wǎng)址

Nodeschool 教你 Web 開發(fā)技能的開源課程嫉嘀,自學(xué)或者參加一個附近的教學(xué)活動。

里面的node初級教程一共13個task杭措,學(xué)下來應(yīng)該收獲頗豐视搏。

1,在node環(huán)境編譯js

2盟广,獲取命令行輸入的參數(shù)

let arr = []
function add(arr){
    for(var i = 2 ; i < process.argv.length ; i++){
        //從第三個參數(shù)開始才是我們輸入的參數(shù)
        arr.push(parseInt(process.argv[i]))
    }
    
    //累加
    var tol = arr.reduce(function(per,cur){
        return per + cur
    })
    return tol
}

var total = add(arr)
console.log(total)

通過全局變量process.argv獲取參數(shù)數(shù)組,reduce函數(shù)累加獲取總數(shù)

3铝噩,第一個I/O

var fs = require('fs')

//同步
//var str = fs.readFileSync('text.txt')
fs.readFile('text.txt',function(err,data){
    if(err){
        console.log(err)
        return
    }else{
        console.log('一共'+data.toString().split('\n').length+'行')
    }
})

readFile不帶sync衡蚂,代表同步讀取,讀取本地資源并輸出

4骏庸,第一個異步I/O

5,LS過濾器

繼續(xù)了解node的fa和path模塊年叮,讀取目錄文件(readdir),輸出特定后綴格式的文件(extname)

6只损,使其模塊化

module代碼

//接收兩個參數(shù)一姿,通過module.exports導(dǎo)出,遵循commonJs規(guī)范
//這里提一下跃惫。叮叹。。
//AMD是從commonJs中分離出來的爆存,推崇依賴前置蛉顽,按需加載,使用difine定義模塊先较。CMD推崇依賴就近携冤。
module.exports = function mymodule(dirName,ext,callback){
    var fs = require('fs')
    var path = require('path')
    var fileList = []
    fs.readdir(dirName,function(err,list){
        if(err){
            return callback(err)
        }
        for(var filename of list){
            //console.log(path.extname(filename))
            if(path.extname(filename) == ext){
                fileList.push(filename)
            }
        }   
                //傳遞的參數(shù)中可傳回調(diào)函數(shù)悼粮,參數(shù)可以后面再寫,空的參數(shù)以null替代
        return callback(null,fileList)
    })
}

導(dǎo)入代碼

//模塊所依賴的模塊已經(jīng)自行導(dǎo)入曾棕,再使用時不必導(dǎo)入
var mymodule = require('./test3.js')
mymodule('../Node2','.js',function(err,list){
    if(err){
        console.log(err)
        return
    }else{
        console.log(list)
    }
})

7扣猫,HTTP 客戶端

http.get()請求第三方資源

var http = require('http')

var Url = process.argv[2]
http.get(Url,res=>{
    res.setEncoding('utf8');
    res.on('data',data=>{
        //直接爬下網(wǎng)站的html文檔了
        console.log(data)
    })
    res.on('end',()=>{
        console.log('請求結(jié)束')
    })
}).on('error',err=>{
    console.log('請求失敗')
})

8,HTTP收集器

get請求到的資源不是一次性收集到的翘地,而是一段一段慢慢傳過來的申尤,將每一段在res.on('data')中監(jiān)聽起來,在res.on('end')中輸出才算是收集成功

var http = require('http')

var Url = process.argv[2]
//console.log(Url)
http.get(Url,res=>{
    var data = ''
    res.setEncoding('utf8');
    res.on('data',res=>{
        //累加收集
        data += res
    })
    res.on('end',()=>{
        console.log(data.length)
        console.log(data)
    })
}).on('error',err=>{
    console.log('請求失敗')
})

9衙耕,異步回調(diào)

var http = require('http')
var index = 2


getInfor()

function getInfor(){
    var Url = process.argv[index]
        if(!Url){
            return
        }   
 http.get(Url,res=>{
    var data = ''
    res.setEncoding('utf8');
    res.on('data',res=>{
        //直接爬下網(wǎng)站的html文檔了
        data += res
    })
    res.on('end',()=>{
        console.log(data)
        index += 1
                //遞歸也能處理
        getInfor()
    })
    }).on('error',err=>{
        
    })
}

10昧穿,socket雙全工通信

const net = require('net');
//回調(diào)函數(shù)中的定義函數(shù),每當(dāng)收到一個 TCP連接臭杰,都會調(diào)用一次這個回調(diào)函數(shù)粤咪。
const server = net.createServer((socket) => {
  // 'connection' listener
  console.log('client connected');
  var date = new Date();
    var seperator1 = "-";
    var seperator2 = ":";
    var month = date.getMonth() + 1;
    var strDate = date.getDate();
    if (month >= 1 && month <= 9) {
        month = "0" + month;
    }
    if (strDate >= 0 && strDate <= 9) {
        strDate = "0" + strDate;
    }
    var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
            + " " + date.getHours() + seperator2 + date.getMinutes();
    
  //寫入
  socket.write(currentdate+'\n');
  socket.pipe(socket);
  //手動結(jié)束,否則.net服務(wù)器會一直開著接收TCP信號
  socket.end();
});
//監(jiān)聽端口為命令行第一個參數(shù)
server.listen(process.argv[2], () => {
    
});

11渴杆,HTTP文件服務(wù)器

var http = require('http')
var fs = require('fs')

var server = http.createServer((req,res)=>{
    res.writeHead(200, {'Content-Type': 'text/plain'});
    //文件模塊的創(chuàng)建寫入流
    var str = fs.createReadStream(process.argv[3])
    //連接文件寫入流和http響應(yīng)流寥枝,寫入的文件會在res里顯示出來
        str.pipe(res)
    res.end(()=>{});
})

server.listen(process.argv[2])

12,HTTP大寫轉(zhuǎn)化器

最近十九大磁奖,翻不出去囊拜。。比搭,cnpm也失效了冠跷,這個題要安裝模塊through2-map,轉(zhuǎn)化為大寫用字符串的toUpperCase()好了

13身诺,JSON api服務(wù)器

var http = require('http')
var url = require('url');
var querystring = require('querystring');

http.createServer(function(req,res){
    var obj = url.parse(req.url); //解析請求的url
    var param = querystring.parse(obj.query); //獲取請求url中的query參數(shù)蜜托,并轉(zhuǎn)為對象格式
    res.writeHead(200, { 'Content-Type': 'application/json' });
    //通過pathname判斷調(diào)用的是哪個接口
        if('/api/parsetime'===obj.pathname){
         //當(dāng)傳入的是正規(guī)時間時
        var date = new Date(param.iso);
        var retObj = {
          hour: date.getHours(),
          minute: date.getMinutes(),
          second: date.getSeconds()
            }; //返回時間對象
        res.end(JSON.stringify(retObj));
    }
    if('/api/unixtime'===obj.pathname){
         //當(dāng)傳入的是時間戳?xí)r
        var date = new Date(param.iso);
        var retObj = {unixtime: date.getTime()};
        res.end(JSON.stringify(retObj));
    }
}).listen(process.argv[2]);

初探node,路漫漫而修遠(yuǎn)霉赡。橄务。


DQUD%VD~SG(BIDWWZYSNK%1.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市穴亏,隨后出現(xiàn)的幾起案子蜂挪,更是在濱河造成了極大的恐慌,老刑警劉巖嗓化,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棠涮,死亡現(xiàn)場離奇詭異,居然都是意外死亡刺覆,警方通過查閱死者的電腦和手機(jī)严肪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诬垂,你說我怎么就攤上這事劲室。” “怎么了结窘?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵很洋,是天一觀的道長。 經(jīng)常有香客問我隧枫,道長喉磁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任官脓,我火速辦了婚禮协怒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卑笨。我一直安慰自己孕暇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布赤兴。 她就那樣靜靜地躺著妖滔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桶良。 梳的紋絲不亂的頭發(fā)上座舍,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音陨帆,去河邊找鬼曲秉。 笑死,一個胖子當(dāng)著我的面吹牛疲牵,可吹牛的內(nèi)容都是我干的承二。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼纲爸,長吁一口氣:“原來是場噩夢啊……” “哼矢洲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缩焦,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎责静,沒想到半個月后袁滥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灾螃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年题翻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡嵌赠,死狀恐怖塑荒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姜挺,我是刑警寧澤齿税,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站炊豪,受9級特大地震影響凌箕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜词渤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一牵舱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缺虐,春花似錦芜壁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纫溃,卻和暖如春腰涧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背紊浩。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工窖铡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坊谁。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓费彼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親口芍。 傳聞我的和親對象是個殘疾皇子箍铲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)鬓椭,斷路器颠猴,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,193評論 25 707
  • 個人入門學(xué)習(xí)用筆記、不過多作為參考依據(jù)小染。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點(diǎn)翘瓮、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,472評論 1 37
  • 課程一開始,山長就問我們裤翩,金融市場的地位资盅。金融市場是現(xiàn)代經(jīng)濟(jì)皇冠上的明珠,97年索羅斯通過在金融市場上狙擊泰銖將亞...
    徐清閱讀 440評論 0 0
  • 身在江湖今穿,誰還沒有受過苦缤灵。苦難荣赶,人人對之是避之不及凤价,然而從古至今,卻有很多人贊頌苦難的道德價值拔创。 ...
    家明愛文藝閱讀 819評論 2 9