node筆記

var  htttp = require('http')   加載http模塊var server = http.createServer(function(req,res){  建立一個服務器  req請求 res響應    req.url      請求地址    res.write()     給瀏覽器端輸出    res.end()   結束})server.listen(8080)   監聽path 工具函數   1 path.join([path1][, path2][, ...])    用於鏈接路徑。   2 path.resolve([from ...], to)    將 to 參數解析爲絕對路徑。   3 path.resolve(from, to)    用於將相對路徑轉爲絕對路徑。   4 path.parse(pathString)    返回路徑字符串的對象。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。文件操做:fs  -----file system  文件系統的縮寫var fs = require('fs')  加載fs模塊fs.readFile(文件名,回調函數)   讀文件/異步操做  回調函數有兩參數 err data/讀到的數據fs.writeFile(文件名,要寫的內容,回調函數)  寫文件  回調函數有一個參數  errfs.rename('原來文件名','如今名字',function(err){})。。。。。。。。。。。。案例練習。。。。。。。。。。。。。。。。var http = require('http')var fs = require('fs')var server = http.createServer(function(req,res){    var fileName = './www'+req.url;    //根目錄下面有個www文件夾    fs.readFile(fileName,function(err,data){        if(err){            res.write('404')        }else{            res.write(data)        }        res.end()    })})server.listen(8080)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。數據請求get請求    req.json({key:value}) 給前端發送數據,前端經過ajax請求獲得數據    req.url  //get數據存在url上    querystring 模塊  把username=blue&age=18轉換成json{username:blue,age:18}    querystring.parse('username=blue&age=18')-> {username:blue,age:18}    querystring.stringify  跟querystring.parse做用反過來    url模塊   專門用來解析地址的  把http://baidu.com?username=blue&age=18解析    var obj = url.parse('http://baidu.com?username=blue&age=18',true)  => obj.pathname-> http://baidu.com  obj.query-> {username:blue,age:18}post請求  數據分段發送    var str=''    req.on('data',function(data){ data有一段數據到達就會觸發一次        str+=data    })    req.on('end',function(){      end數據所有到達觸發一次        console.log(str) 這裏str已是完整數據    })var server = http.createServer(function(req,res){  建立一個服務器  req請求 res響應    req  //來接受前臺傳過來的數據})    第二種方法經過中間件body-parser    app.use(bodyParser.urlencoded({extended:false})).......................................................................................http:協議     協議流程  1 http客戶端發起請求,建立端口               2 http服務器在端口監聽客戶端請求               3 http服務器想客服端返回狀態和內容瀏覽器後計算機 訪問一個 地址的大概操做步驟1. 瀏覽器(如Chrome)搜索自身的DNS 緩存2. 搜索操做系統自身的DNS緩存(瀏覽器沒有找到緩存或緩存已經失效)3. 讀取本地的 HOST 文件4. 瀏覽器 發起一個DNS 的 一個系統調用5. 瀏覽器得到域名對應的 IP 地址後,發起 HTTP 的「三次握手🤝」6. TCP/IP 鏈接創建起來後,瀏覽器就能夠向服務器發送 HTTP 請求了,例如使用 HTTP 的 GET 方法請求一個根域裏的一個域名,協議能夠採用 HTTP 1.0 的一個協議。7. 服務器端接收到了這個請求,根據路徑參數,競購後端的一些處理後,把處理的一個結果的數據返回給瀏覽器,若是是 目標網 的頁面就會把完整的 HTML 頁面代碼返回給瀏覽器。8. 瀏覽器拿到了 目標網 的完整的HTML 頁面代碼,在解析和渲染這個頁面的時候,裏面的 JS 、CSS、 圖片靜態資源,他們一樣也是一個個 HTTP 請求,都須要上面的主要七個步驟9. 瀏覽器根據拿到的資源對頁面進行渲染,最終把一個完整的頁面呈現給用戶.......................................................................................EventsEmittervar EventsEmitter = require('events').EventsEmittervar life = new EventsEmitter()life.on('事件名',對應函數)  //監聽最多爲10個life.emit('事件名')######################################################################################模塊化    系統模塊  Crypto加密  Events事件 Net網絡操做 OS操做系統信息 Path處理文件路徑  stream流操做    自定義模塊        require  引入模塊            通常是引入系統模塊 只要require('http')            有'./'從當前目錄找,沒有'./' 從系統模塊或者node_nodules文件夾找        module 模塊輸出批量   //module.exports ===exports            module.exports={}        exports 單個輸出            exports.a=12  向外輸出一個變量a    包管理器 npm     install下載  publish上傳包 unpublish刪除包、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、express框架    保留了原生的功能,添加了一些方法    const express = require('express')  模塊引入    const server = express()    server.use('地址',function(req,res){   添加一個響應或者說處理請求        //        res.send('123')        res.redirect('地址')  重定向  地址是跟着根目錄走的        res.end()    })    server.listen(8080)    。。。。。。。。。。。。。。。。。。。。。。。。。。。    server.get('/',function(req,res){})  只接受get請求    server.post('/',function(req,res){}) 只接受post請求    server.use('/',function(req,res){})  不管是get 仍是post 最後都會走到use    express 中間件或者插件        1.express-static   處理靜態文件            使用法法 server.use(expressStatic('./www'))         2.body-parser    server.get('/',function(req,res){        req.query //get方式傳遞過來的數據,無需中間件支持        req.body  //post方式傳遞過來的數據,需body-parser支持  用以前需 server.use(bodyParser.urlencoded{extended/擴展模式:false,limit/大小限制:2*1024})    })    *********************************************    express的鏈式操做    server.use('/',function(req,res,next){        console.log('a')        next()    //必需要有next纔會執行下面代碼    })    server.use('/',function(req,res,next){            console.log('b')      })、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、cookie ,session    cookie  在*********瀏覽器保存一些數據**********,每次向服務器發送請求都會帶過來,只有4k,不安全    session 保存數據,****保存在服務器端****,存儲大,安全    session 基於cookie實現的,cookie中會有session的id,服務器就是利用sessionid找到session文件,讀取,寫入    隱患:session劫持    在/aaa/bbb 路徑下設置了一個cookie  那麼在/aaa和/目錄下均可以訪問這個cookie  反之不行    cookie        1,讀取 --基於cookie-parser來讀起cookie  用法  server.use(cookieParser('密鑰'))//在req上加個cookies和signedCookies,加了密鑰就能夠把有密鑰的cokie解析        server.use('/aaa/html',function(req,res){            req.signedCookies  //讀取加密鑰的cookie            req.cookies  //讀取沒有加密鑰的cookie            res.cookie('user','cy',{path(在aaa路徑下才能訪問這條cookie):'/aaa',maxAge(cookie過時時間):30*24*3600*1000,signed(簽名密鑰):true})  //發送設置一個cookie            res.clearCookie(刪除cookie名字)  刪除cookie        })    session  利用cookie-session中間件 用法server.use(cookieSession({keys:[]//必須加密鑰數組,maxAge:過時時間,以毫秒爲單位}))         用session必須先server.use(cookieParser())         而後在server.use(cookieSession({}))  //在req加session   設置req.session['key']=value         解析好的session在req.session         刪除delete req.session&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&模板引擎---------jade-ejs-swig    jade 侵入式    jade.renderFile('文件',{pretty(格式美化):true})            使用方法                html          //縮進表明子元素                    body                        div            屬性格式----屬性放()裏面,逗號隔開                script(src='a.js') ==><script src='a.js'></script>                style有兩種寫法   1.style={width:'100px'} 2.style='width:100px'                class有兩種寫法   2.class=[clasa,clasb]   2.class='clasa clasb'            內容格式                1.空一個格直接日後寫                    p 內容==><P>內容</p>            |  表明|後面的內容原樣輸出            .  表明子(裏面)的東西都原樣輸出    div.            -  表明後面是一段js代碼            div!表明不須要轉義輸出html            include 引入外部文件            #{變量名}  表明變量                    特殊 style=變量,class=變量   不須要加#{}                    span #{a}  等價於 span=a  都輸出<span> 變量a</span>     -------------------------------------------------------------------------------------     ejs 非侵入式     ejs.renderFile('文件',{數據},function(err){})     頁面中用變量  <%= 變量名 %>  =轉義輸出   -不轉義輸出     <% for(){ %>     <% } %>     <% include %> 引入。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。body-parser 只能解析上傳數據不能解析上傳的文件設置   <form enctype='multipart/form-data'>  <input type='file' >  </form>multer  能夠解析數據跟上傳文件如圖片    var multer =require('multer')    var obgMulter =multer({dest(存儲路徑):'路徑'})     用法server.use(obgMulter.any())  在req上加了一個files     上傳上的文件  req.files=[{文件各類屬性}]multer解析完上傳文件後,會被保存爲一個包含如下字段的對象 req.files=[{文件各類屬性}]:       fieldname - 表單提交的文件名(input控件的name屬性)       originalname - 文件在用戶設備中的原始名稱       encoding - 文件的編碼類型       mimetype - 文件的Mime類型       size - 文件的大小       destination - 文件的保存目錄(DiskStorage)       filename - 文件在destination中的名稱(DiskStorage)       path - 上傳文件的全路徑(DiskStorage)       buffer - 文件對象的Buffer(MemoryStorage)..............................................path 模塊  var path =require('path')  var src='c:\\wamp\\www\\a.html'  var obj =path.parse(str)  obj={    base:文件名部分包括擴展名,    ext: 擴展名,    dir: 路徑    name:文件名不包括擴展名  } path.resolve(_dirname,'/public')  把相對路徑轉換成絕對路徑。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。  consolidate --適配,整合模板引擎到express裏面  配置模板引擎三步  2 用哪一種模板引擎 2模板文件放哪兒 1輸出什麼東西        var consolidate = require('consolidate')  server.set()  對整個server的全局配置        server.set('view engine','html')   //輸出什麼東西        server.set('views','./views')   //模板文件在哪兒        server.engine('html',consolidate.ejs)  //用哪一種模板引擎######################################################################################router-路由  把不一樣的目錄對應到不一樣的模塊    var userRouter = express.Router()   //迷你server    server.use('/user',userRouter)   //掛載在server下面    userRouter.get('/1.html',function(req,res){})  //客戶訪問/user/1.html。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。數據庫  數據庫裏面不能儲存名文密碼 加密以後才存  MD5簽名算法    MD5給密碼簽名加密        const crypto =  require('crypto')        var obj = crypto.createHash('md5')        var  後綴 =‘一串隨機符號’        obj.update('加密的東西'+後綴)        str = obj.digest('hex') 獲取16進制的結果    MySQL:        server端        client端        數據基本概念            兩種單位                1庫:文件夾/用來管理表,自己無法存數據                2表:文件-存儲數據的                    行:一條數據                    列:數據庫裏面不叫列,叫字段,表明一項數據    主鍵:惟一的標識符,性能更高 node中的mysql模塊  是客戶端  兩部  1連接服務端2查詢 var mysql = require('mysql') mysql.createConnection(哪臺服務器,用戶名,密碼,操做哪一個庫)  //連接服務端 mysql.createPool(哪臺服務器,用戶名,密碼,操做哪一個庫) 連接池 var db =mysql.createConnection({host:'localhost',user:'root',password:'123456',database(數據庫名):'2016222',port:'3036'}) db.query(幹啥,回調函數)  //查詢 db.query('SQL語句',function(err,data){}) SQL:結構化查詢語句  SQL標準寫法  1:關鍵字大寫 2庫表字段寫反引號    4大查詢語句--增刪改查    增 INSERT    insert into 表 (字段列表) values(值列表)            如  INSERT INTO `user_table` (`ID`,`username`,`password`) VALUES (0,'chengyuan','123456')    刪 DELETE    delete from 表 where 條件    改 UPDATE    update 表 set 字段=值,字段=值 where 條件    查 SELECT    select 什麼 from 表 where 條件            如      SELECT * FROM `user_table`    select * from user limit 0,5  從匹配到的數據裏面從0條開始 選擇5條     WHERR   age>=18 AND score>100     WHERR   age>=18 OR score>100     ORDER 排序   ORDER BY  age ASC升/DESC降     多條件排序 ORDER BY price ASC, sales DESC     GROUP BY  聚類-合併相同的,相同的數據只保留一條,通常配合COUNT(計數)MIN(最小),MAX(最大),AVG(平均值),SUM(總和)一塊兒使用     COUNT()  計數     求每一個班的平均分 SELECT class,AVG(score) FROM stundent_table GROUP BY class     求每一個班的最高最低分 SELECT class,MIN(score),MAX(score) FROM stundent_table GROUP BY class                            class min-score  max-score                獲得數據是  1     30         100                            2     40          99      LIMIT  --限制輸出  LIMIT 10 前10條   LIMIT 5,8 從第五條開始 要八個      route  //至關於小型express  把一個大項目拆分紅許多小模塊      var route = require('express-route')      ////////////////////res.json()  給前端傳json數據當路由地址是  'user/:id'  user/100  =>   req.params.id獲取到100cheerio 能夠理解成一個 Node.js 版的 jquery,對語法不明白的先去學下jquery。redis
相關文章
相關標籤/搜索