node.js筆記

一、什么是node.js

1薄榛、node.js

1.Node.js 就是運(yùn)行在服務(wù)端的 JavaScript
2.Node.js 是一個(gè)基于Chrome JavaScript 運(yùn)行時(shí)建立的一個(gè)平臺者吁。
3.Node.js是一個(gè)事件驅(qū)動I/O服務(wù)端JavaScript環(huán)境窘俺,基于Google的V8引擎,V8引擎執(zhí)行Javascript的速度非掣吹剩快瘤泪,性能非常好。

2育八、node的特點(diǎn)

1.異步I/O
```  
    $.post('url',,{title:'學(xué)習(xí)node的筆記'}对途,function(data){
        console.log('收到相應(yīng)')
    })
    console.log('發(fā)送Ajax結(jié)束')
```
2.事件與回調(diào)函數(shù)
3.單線程
4.跨平臺

node.js創(chuàng)建第一個(gè)應(yīng)用

可以直接在命令行(黑窗口)運(yùn)行.js文件(不推薦使用)
最優(yōu)選擇:新建.js 文件

1.引入require模塊
    var http = require('http');// const http = require('http');
2.創(chuàng)建服務(wù),服務(wù)器可以監(jiān)聽客戶端的請求
    var server = http.createServer(function(req, res) {
        console.log('111');
    });
3.監(jiān)聽請求
    server.listen(8081);

二髓棋、npm

npm由三部分組成
1.網(wǎng)站
2.注冊庫(registry)
3.命令行工具(CLI)
+ 網(wǎng)站是開發(fā)者使用npm的最基本方法掀宋,包括發(fā)現(xiàn)/查找package,編寫說明,管理他們的npm各個(gè)方面仲锄。
+ 注冊庫(registry)是一個(gè)關(guān)于package信息的一個(gè)巨大的庫劲妙。
+ CLI 通過命令行或者終端,這是開發(fā)者通過CLI與npm打交道的途徑儒喊。

實(shí)例——找到一個(gè)package

例如镣奋,假設(shè)你想為你的應(yīng)用找一個(gè)條形碼(二維碼),預(yù)期花費(fèi)數(shù)周時(shí)間來設(shè)計(jì)和實(shí)現(xiàn)怀愧,還不如去看下是否有人已經(jīng)上傳了一個(gè)二維碼的package侨颈。
1.從搜索框輸入值開始
2.相關(guān)選項(xiàng)將出現(xiàn)
3.或者點(diǎn)擊,去過濾更多的有可能的
4.當(dāng)你選擇一個(gè)package去探索芯义,更多的信息會展示出來哈垢,這些信息是package的作者寫的,很詳細(xì)扛拨。
5.現(xiàn)在你可以瀏覽開發(fā)者文檔耘分,去學(xué)習(xí)如何使用這些package。

三、文件系統(tǒng) fs

readFile('文件名',function(err,data){})
writeFile('文件名','新增內(nèi)容',function(err,data){})

同步和異步

// 異步讀取
fs.readFile('1.input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("異步讀取: " + data);
});
// 同步讀取
var data = fs.readFileSync('1.txt');
console.log("同步讀取: " + data.toString());

常用的語法
fs.open(path, flags[, mode], callback)
參數(shù):路徑求泰,打開文件的行為(只讀央渣、讀寫等),文件的模式渴频,回調(diào)
fs.open(path, flags[, mode], callback)
fs.close(fd, callback) // fd 通過 fs.open() 方法返回的文件描述符

四芽丹、get post

get 在url中 數(shù)據(jù)跟在url后邊的
post 不在url中 數(shù)據(jù)單獨(dú)發(fā)的

GET 數(shù)據(jù)解析
    1、自己切
    2.querystring   xxx=xx&xx=xx
    3.urlLib        aa?xxx=xx&xx=12
        urlLib.parse(url,true) pathname/query
url
    const urlLib = require('url')
    var obj = urlLib.parse('http://www.bufanui.com/index?a=2&b=5',true) //加上true 自動將query解析成json
    console.log(obj);
    Url {
        protocol: 'http:',
        slashes: true,
        auth: null,
        host: 'www.bufanui.com',
        port: null,
        hostname: 'www.bufanui.com',
        hash: null,
        search: '?a=2&b=5',
        query: 'a=2&b=5',
        pathname: '/index',
        path: '/index?a=2&b=5',
        href: 'http://www.bufanui.com/index?a=2&b=5' }
querystring
    const querystring = require('querystring')
    var json = querystring.parse("user=shi&pass=shi")
    console.log(json);//{ user: 'shi', pass: 'shi' }
post
    數(shù)據(jù)量大卜朗,url集中在內(nèi)容
    分段發(fā)送

五拔第、模塊化

1、系統(tǒng)模塊:http/querystring/url
2场钉、自定義模塊:
3楼肪、包管理器(npm)

系統(tǒng)模塊:
    斷言:Assert
    Buffer
    c/c++ 擴(kuò)展
    Crypto 加密
    Path  處理文件路徑
    Stream 流操作
    。惹悄。春叫。
自定義模塊
    1.模塊的組成
        require 請求,引入其他模塊的 (系統(tǒng)模塊泣港、自定義模塊)
        modules 模塊,批量對外輸出
        exports 輸出暂殖,對外輸出
    2.npm (NodeJS Package Manager) 包管理器
        1.統(tǒng)一下載途徑
        2.自動下載依賴
        3.node_modules 存放依賴
            (   如果有./  從當(dāng)前目錄找
                如果不加./  先從系統(tǒng)模塊找,再從node_modules找 )
        自定義的模塊当纱,統(tǒng)一放在node_modules中
    3.如何發(fā)布自己的模塊
        創(chuàng)建一個(gè)新的文件夾呛每,npm init 
        編寫包的邏輯
        npm publish,上傳成功坡氯,npm --force unpublish (取消發(fā)布)
    注意:引入自己的模塊晨横,路徑加./
          對外輸出內(nèi)容 ,必須加exports
          js 可加可不加

六箫柳、express框架

簡潔而靈活的 node.js Web應(yīng)用框架
1.安裝
npm install express --save
2.配置
3.接受請求 get/post/use
4.響應(yīng)數(shù)據(jù)

非侵入式(增強(qiáng)式)
    req req.url
    res
        原生  res.write()
        express res.send() // 功能更多
優(yōu)勢:express 保留了原生的功能手形,添加了一些方法,增強(qiáng)原有的功能
使用三部曲:
1.創(chuàng)建服務(wù) var server = express()
2.監(jiān)聽 server.listen()
3.處理請求 server.use('地址'悯恍,function(req,res){})
    處理請求三種方式:
    get('/',function(req,res){})
    post()
    use() 融合兩種請求
中間件 (使用库糠、寫、鏈?zhǔn)剑?    eg:express-static  //設(shè)置靜態(tài)文件路徑
        const static = require('express-static')
        server.use(static('/'))
    自己寫
        server.use(function(req,res,next(){
             var str = ''
            req.on('data',function(){
                str += data
            })
            req.on('end',function(){
                req.body = querystring.parse(str);
                next()
            })
        }))
處理數(shù)據(jù)
    GET 無需中間件
        req.query
    POST 需要 body-parser
        server.use(bodyParser.unlencode({})) //用于處理 JSON, Raw, Text 和 URL 編碼的數(shù)據(jù)
        server.use(function(){
            req.body
        })
    server.use(function(req,res,next(){
        req.body
    }))
鏈?zhǔn)讲僮?    next() 下一個(gè)步驟

七涮毫、cookie

cookie
存在瀏覽器中 保存一些數(shù)據(jù)瞬欧,每次請求都會帶過來
不安全、有限(4K)
簽名罢防、加密
session
保存數(shù)據(jù)艘虎,保存在服務(wù)端
安全、足夠大
不能獨(dú)立存在咒吐、基于cookie實(shí)現(xiàn)的
cookie 中會有一個(gè)session的id野建、服務(wù)器利用session找到session文件属划、讀取寫入
隱患:session劫持

cookie 
    1、讀取  cookie-parser
        server.use(cookieParser("相同的簽名 "))
        server.use(function(){
            req.cookies  ==>未簽名的cookie
            req.signedCookies  簽名
        })
    2贬墩、發(fā)送   response響應(yīng)回去的
        res.secret = ''
        res.cookie('名字','值',{
            path:'/aaa', // 向上繼承
            maxAge:30*24, // 毫秒
            signed:ture // 是否簽名  簽名的密鑰
        })
    3妄呕、刪除
        res.clearCookie('名字')
    4陶舞、cookie-encrypter 加密
session 
    cookie-session
    server.use(cookieParser())
    server.use(cookieSession({
        keys:['12','sss'],// 密鑰
        maxAge: 3600*1000, // 毫秒
    }))
    server.use('/',function(){
        req.session
    })
    delete res.session
    1、寫入
    2绪励、讀取

八肿孵、模板引擎 (渲染頁面)

    jade -破壞式、強(qiáng)依賴  不保持原來html
        render('字符串)
        renderFile('文件名',參數(shù))

        根據(jù)鎖進(jìn)疏魏,規(guī)定層級
        屬性放在()停做,逗號分隔 
            style = {}
            class = []
        內(nèi)容 空格 依次  
            | 原樣輸出
            . 所有的下一級 原樣輸出
            include a.js
            # {a+b }  輸出內(nèi)容
            - var a = 5 / for
            !標(biāo)簽正常輸出
    ejs -非侵入式 保留式
        <%=  name  %>
        <%=  12+5  %>
        <%=  'fefefe'  %>
        <%=  json.arr[0].name  %>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末大莫,一起剝皮案震驚了整個(gè)濱河市蛉腌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌只厘,老刑警劉巖烙丛,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異羔味,居然都是意外死亡河咽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門赋元,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忘蟹,“玉大人,你說我怎么就攤上這事搁凸∶闹担” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵护糖,是天一觀的道長杂腰。 經(jīng)常有香客問我,道長椅文,這世上最難降的妖魔是什么喂很? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮皆刺,結(jié)果婚禮上少辣,老公的妹妹穿的比我還像新娘。我一直安慰自己羡蛾,他們只是感情好漓帅,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般忙干。 火紅的嫁衣襯著肌膚如雪器予。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天捐迫,我揣著相機(jī)與錄音乾翔,去河邊找鬼。 笑死施戴,一個(gè)胖子當(dāng)著我的面吹牛反浓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赞哗,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼雷则,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肪笋?” 一聲冷哼從身側(cè)響起月劈,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藤乙,沒想到半個(gè)月后艺栈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡湾盒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年湿右,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罚勾。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毅人,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尖殃,到底是詐尸還是另有隱情丈莺,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布送丰,位于F島的核電站缔俄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏器躏。R本人自食惡果不足惜俐载,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望登失。 院中可真熱鬧遏佣,春花似錦、人聲如沸揽浙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膛虫,卻和暖如春草姻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稍刀。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工撩独, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掉丽。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓跌榔,卻偏偏與公主長得像异雁,于是被迫代替她去往敵國和親捶障。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

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