Node.js記錄

在智能社上聽了一些關於node.js的視頻,總結一小部份內容,都是總結老師講的知識點,而且也是在不斷學習的過程,因此會不斷更新。也是爲了怕本身遺忘一些知識點,同時現今沒有什麼項目可讓我去真正實踐,這樣屢次瀏覽也爲之後打基礎。接下來就進入正題。css

 

模塊html

  這裏有不少東西均可以去 npm 的官方網站裏去找的。同時也能夠發佈本身的模塊。  node

  require——引入其餘模塊
  exports——輸出
  module——批量輸出express

  這些只是一個例子,其餘的均可以在上面看到。npm

  node_modules這個文件夾是用於放模塊的瀏覽器

 

  express框架安全

  express裏,除了write,end,還有一個就是send,就是加強了功能,沒有改變原生的功能,因此也算是非侵入式的。cookie

  對於數據傳輸,GET無須要中間件,直接req.query 就能夠了,可是POST不行,必需要一箇中間件,就是body-parser,須要先下載這個才能夠。session

 

  body-parser參數框架

    1.extended  //擴展模式true  false普通模式

    2.limit  //限制模式

 

鏈式操做:

server.use('/',function(req,res,next){

  console.log('a');

});

server.use('/',function(req,res,next){

  console.log('b');

})

 

cookie和session

  首先我認爲二者最大的區別是一個不安全,一個較安全。cookie是保存在瀏覽器中的,並且頗有限,因此很不安全。session是保存在服務端的,因此較安全。

  可是爲何如今還保存着cookie呢?實際上是由於session是基於cookie實現的。

  

  cookie

  發送:

  res.secret='字符串';
  res.cookie(名字, 值, {path: '/', maxAge: 毫秒, signed: true});

  

  簽名:

  req.secret='sjdflksdl';

  res.cookie('user','xxx',{singed:true});

  console.log(req.cookies);

  res.send('ok');

 

  cookie空間很小,所有簽名很浪費空間

 

  讀取cookie
    cookie-parser

    server.use(cookieParser('祕鑰'));

    server.use(function (){
      req.cookies 未簽名版
      req.signedCookies 簽名版
    });

 

  刪除cookie

    res.clearCookie(名字);

  

  session

  1.寫入   

    server.use(cookieParser());
    server.use(cookieSession({
      keys: ['aaa', 'bbb', 'ccc']
    }));

    server.use('/', function (req, res){
      console.log(req.session);

      res.send('ok');
    });

  2.讀取

    server.use(cookieParser());
    server.use(cookieSession({
      name: 'sess',
      keys: ['aaa', 'bbb', 'ccc'],
      maxAge: 2*3600*1000
    }));

    server.use('/', function (req, res){
      if(req.session['count']==null){
        req.session['count']=1;
      }else{
        req.session['count']++;
      }

      console.log(req.session['count']);

      res.send('ok');
    });

  3.刪除

    delete req.session

  

模板引擎

  jade

    破壞式的,強依賴。不能和普通的html、css共存

    jade能夠渲染內容renderFile,例如在一個jade文件中寫

    html

      head

        style

    相似的,會出現以下效果,注意,一個縮進就表明下面的內容是子集,就會包含在上面的文字中,若是想要好看,須要用到{pretty:true}

    <html>

      <head>

        <style>

        </style> 

      </head>

    </html>

    可是,好比我想要在一個div裏輸入一些內容,好比abc什麼之類的,若是仍是像剛剛那樣的方法,就會輸出</abc></abc>,這個也不是咱們想要的。因此,用 |abc 來表示,其中 | 表示原樣輸出。不過,若是子元素很是多,那每一行都寫一個 | ,那也太麻煩了。因此有一個更簡單的方法。就是在父元素後面加一個「   .   」,就能夠把裏面包含的全部的內容所有都原樣輸出出來。還有一種方法就是在父元素下面寫 include 後面跟你寫的js文件名,一樣也能夠實現同樣的效果。

    若是要使用變量,好比想要獲取js裏面的內容,{name},要在大括號外加一個「  #  」,諸如此類,運算也是能夠的。同樣的道理,也能夠用 = ,就不用加大括號了。

    輸入代碼能夠用 「  -  」放在前面,相似於剛剛的 |  。

    特殊的是,switch語句中,和之前不同,叫作case , when 代替了之前的case

  注入式攻擊:

    例如我想要在js中加入一個content,內容是

    content: "<h2>這是個啥</h2><p>我也不知道哦!</p>"

    結果會出現下面的狀況:

    

    爲何呢?由於這是jade本身的保護措施,將裏面的標籤所有都破壞了,避免用戶不當心的時候寫錯了。那其實剛開始個人意願就是想要這些標籤呀,因此就能夠在jade裏面本來的 div = content  改成  div != content 就能夠了。 

  ejs

    溫和,弱依賴。不用變化之前的html文件樣式,不過能夠添加一些東西。

    寫屬性是用括號來圈起來。若是想要寫屬性裏的內容,括號外空一格直接寫就能夠了。

    ejs很是的方便,只要js能寫的東西在ejs裏所有都能寫,好比循環啊之類的,也沒有什麼變化。

    在以前說jade的時候,當裏面加入HTML的東西好比<div></div>,它會保護,寫成其餘的東西,ejs也是同樣的,因此若是咱們想要原樣輸出的話,就要把<%= this%>的「  =  」改成「  -  」,就能夠了。

 

 

 

  consolidate

    一種適配模板引擎。

    server.set('view engine' , 'html' );   //其中set與平時的use不同,意思是對這個服務進行的全局的配置。  view engine 是試圖引擎.

    server.set('views' , './xxx');        //返回其中模板文件放在哪

    server.engine('html' , consolidate.ejs) //engine是表示使用哪一種模板引擎。這句代碼的意思就是若是我使用html,則用consolidate下的ejs引擎。

 

    當須要接受用戶請求的時候

    req.send() 和 req.render() 的區別在於send是直接向用戶發送內容,而render是至關於編譯一個東西而且把編譯後的結果發送給用戶。

    req.send( 'xxx' )    req.render( 'xxx.ejs' , { name : ' xxx '} )

 

 

  router

    路由。簡單來講就是把不一樣的目錄對應到不一樣的模塊中去。route是express自帶的,由於很重要,因此不像其餘中間件那樣還須要下載。  

    1.建立router
      var router=express.Router();

    2.把router添加到server
      server.use('/user', router);

    3.router內部      router.get('/1.html')      router.post('/2.html')

相關文章
相關標籤/搜索