13焚鹊、nodejs(國慶+中秋)(07--13)--模塊化(含模板jade)

01痕届、模塊

模塊化——
1.系統(tǒng)模塊:http、querystring末患、url
2.自定義模塊
3.包管理器

系統(tǒng)模塊:

斷言:

www.baidu.com->
getServer
Crypto  加密
Events  事件
Net 網(wǎng)絡(luò)操作
OS  操作系統(tǒng)信息
Path    處理文件路徑
Stream  流操作
Timers  定時器
ZLIB    壓縮

02研叫、沒有全局變量的
自動會加上去一些代碼,外邊的兩個括號是系統(tǒng)自動加上的

(function(){})()

03、

模塊化:
系統(tǒng)模塊
自定義模塊
1.模塊組成
2.npm
3.發(fā)布自己的模塊
引入自己的模塊——./     ?
對外輸出東西——必須加給exports
--------------------------------------------------------------------------------------
exports.xxx=??;
exports.xxx=??;
exports.xxx=??;
module.exports={
    xxx:    ??,
    xxx:    ??,
    xxx:    ??
};
----------------------------------------------------------------------------
require——引入其他模塊
exports——輸出
module——批量輸出
-----------------------------------------------------------------------------
1.自己的模塊
    require
    module
    exports
2.引入模塊  ./  ?
3.".js"可選
----------------------------------------------------------------------------
npm:NodeJS Package Manager(NodeJS包管理器)
1.統(tǒng)一下載途徑
2.自動下載依賴
---------------------------安裝-----------------------------------------
npm install xxx
npm uninstall xxx
--------------------------------------------------------------------------
node_modules——放模塊
--------------------------------------------------------------------------
./
不加./        必須放在node_modules里面
---------------------------------------------------------------------------
require
1.如果有"./"
    從當(dāng)前目錄找
2.如果沒有"./"
    先從系統(tǒng)模塊
    再從node_modules找
----------------------------------------------------------------------------
自定義模塊統(tǒng)一阻塑,都放到node_modules里面
----------------------------------------------------------------------------
1.模塊里面
    require——引入
    exports——輸出
    module.exports——批量輸出
2.npm
    幫咱們下載模塊
    自動解決依賴
3.node_modules
    模塊放這里
—————————————————————————
npm login
npm whoami

npm init
npm publish
npm --force unpublish
-------------------------------------------------------------------------------

4.項目安裝--項目運用

npm init
npm install express
運用
const express = require('express')
var server = express()
server.use('/b.html', (req, res) => {
    res.send('abc')
    res.end()
})
// z這里需要指定localhost
server.listen(8090,'127.0.0.1');

05蓝撇、

express框架
1.安裝
2.配置
3.接收請求
4.響應(yīng)
----------------
非侵入式
req
原生:
res.write();
res.end();
express:
*res.send();
res.write();
res.end();
-----------------------------------------------------------------------
express保留了原生的功能,添加了一些方法(send)陈莽,增強原有的功能
-------------------------------------------------------------------------------------
//1.創(chuàng)建服務(wù)
var server=express();
//2.監(jiān)聽
server.listen(8080);
//3.處理請求
server.use('地址', function (req, res){
});
--------------------------------------------------------------------------
3種方法:
.get('/', function (req, res){});
.post('/', function (req, res){});
.use('/', function (req, res){});
----------------------------------------------------------------------
中間件
-------------------------------------------------------------
/login?user=xxx&pass=xxx
=>{ok: true/false, msg: '原因'}
------------------------------
express框架:
1.依賴中間件
2.接收請求
  get/post/use
  get('/地址', function (req, res){});
3.非破壞式的
  req.url
4.static用法
  const static=require('express-static');
  server.use(static('./www'));
-----------------------------------
注意:
 // z這里需要指定localhost
server.listen(8090,'127.0.0.1');

06渤昌、

Express:
1.數(shù)據(jù):GET虽抄、POST
2.中間件:使用、寫独柑、鏈?zhǔn)讲僮?----------------------------------------------------
GET-無需中間件
req.query
POST-需要"body-parser"
server.use(bodyParser.urlencoded({}));
server.use(function (){
    req.body
});
---------------------------------------------------------------------
鏈?zhǔn)讲僮鳎?------------------------------------------------------------------------------
1.GET迈窟、POST
  req.query
  server.use(bodyParser.urlencoded({limit: }));
  server.use(function (req, res, next){
    req.body
  });
2.鏈?zhǔn)讲僮?  server.use(function (req, res, next){});
  server.get('/', function (req, res, next){});
  server.post(function (req, res, next){});
  next——下一個步驟
  next();
  server.use('/login', function (){
    mysql.query(function (){
      if(有錯)
        res.emit('error');
      else
        next();
    });
  });
3.中間件(body-parser)、自己寫中間件
  next();
  server.use(function (req, res, next){
    var str='';
    req.on('data', function (data){
      str+=data;
    });
    req.on('end', function (){
      req.body=querystring.parse(str);
      next();
    });
  });

07忌栅、

express:
1.數(shù)據(jù)
2.中間件
--------------------------------------------------------------------------
http-無狀態(tài)的
cookie车酣、session
cookie:在瀏覽器保存一些數(shù)據(jù),每次請求都會帶過來
  *不安全索绪、有限(4K)
session:保存數(shù)據(jù)湖员,保存在服務(wù)端
  *安全、無限
-----------------------------------------------------------------------------
session:基于cookie實現(xiàn)的
  *cookie中會有一個session的ID瑞驱,服務(wù)器利用sessionid找到session文件娘摔、讀取、寫入
  隱患:session劫持
------------------------------------------------------------------------------
cookie
1.讀取——cookie-parser
2.發(fā)送——
session
cookie-session
-------------------------------------------------------------------------
cookie:
1.cookie空間非常小——省著用
2.安全性非常差
1.精打細(xì)算
2.校驗cookie是否被篡改過
a.發(fā)送cookie
res.secret='字符串';
res.cookie(名字, 值, {path: '/', maxAge: 毫秒, signed: true});

b.讀取cookie
cookie-parser

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

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

c.刪除cookie
res.clearCookie(名字);
----------------------------------------------------------------------------------
cookie-parser
cookie-encrypter
--------------------------------------------------------------------------------------
session:
cookie-session
1.寫入
2.讀取
session劫持
-----------------------------------------------------------------------------------
cookie-session
server.use(cookieParser());
server.use(cookieSession({
    keys: [.., .., .., ..]
}));
server.use('/', function (){
    req.session
});
delete req.session
---------------------------------------------------------------------------------------
1.cookie-存在瀏覽器唤反,4K凳寺,不安全
  簽名、加密
2.session-存在服務(wù)器
  不能獨立存在彤侍,基于cookie
-------------------------------------------------------------------------------------
server.use(cookieParser('簽名字符串'));
server.use(cookieSession({
}));

server.use(function (req, res){
    res.cookie(名字, 值, {signed: true});
    res.cookies['user']
    res.clearCookie('名字');

    res.session['xxx']
    delete res.session['xxx'];
});
--------------------------------------------------------------------------------

08肠缨、node后段想前端發(fā)送cookie,也就是設(shè)置cookie

const express = require('express')
var server = express()
server.use('/aaa/a.html', (req, res) => {
    /* 注意:這里是設(shè)置在/aaa的路徑下下邊的盏阶。 必須得訪問到aaa路徑才行的 */ 
    res.cookie('name', 'heliang', {path: '/aaa', maxAge: 30*24*3600*1000})
    res.send('Ok')
})
server.listen(8090)

截圖:


image.png

9晒奕、cookie簽名

const express=require('express');
const cookieParser=require('cookie-parser');
var server=express();
//cookie
server.use(cookieParser('wesdfw4r34tf'));
server.use('/', function (req, res){
  res.clearCookie('user');
  res.send('ok');
});
server.listen(8080);

10、session加密般哼,提高安全性

const express=require('express');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');=
var server=express();
//cookie
server.use(cookieParser());
server.use(cookieSession({
  keys: ['aaa', 'bbb', 'ccc']
}));
server.use('/', function (req, res){
  console.log(req.session);
  res.send('ok');
});
server.listen(8080);

11吴汪、session加密

const express=require('express');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');
var server=express();
//cookie
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');
});
server.listen(8080);

12、session加密

const express=require('express');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');
var server=express();
//cookie
var arr=[];
for(var i=0;i<100000;i++){
  arr.push('sig_'+Math.random());
}
server.use(cookieParser());
server.use(cookieSession({
  name: 'sess',
  keys: arr,
  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');
});
server.listen(8080);

-------12章---
13蒸眠、jade

要用的時候先安裝: npm install jade
模板引擎:
jade-破壞式漾橙、侵入式、強依賴
ejs-溫和楞卡、非侵入式霜运、弱依賴
--------------------------------------------------------------------------------
html                <html></html>
html                <html>
    head                <head>
        style               <style></style>
                    </head>
    body                <body>
        div             <div></div>
        div             <div></div>
                    </body>
                </html>
--------------------------------------------------------------------------
1.根據(jù)縮進,規(guī)定層級
2.屬性放在()里面蒋腮,逗號分隔
3.內(nèi)容空個格淘捡,直接往后堆
--------------------------------------------------------------------------------
屬性
<script src="a.js"></script>
script(src="a.js")
--------------------------------------------------------------------
內(nèi)容
<a >官網(wǎng)</a>
a() 官網(wǎng)
-----------------------------------------------------------------------------
<div>
    xxxxx
    <div>
        aaaaa
        ...
    </div>
</div>
------------------------------------------------------------------------
style="width:200px;height:200px;background:red;"
1.普通屬性寫法
2.用json
class="aaa left-swrap active"
1.普通屬性寫法
2.用arr
-----------------------------------------------------------------------
簡寫
----------------------------------------------------------------------
模板引擎:生成頁面
1.jade:破壞式
2.ejs:保留式
---------------------------------------------------------------------
jade
1.根據(jù)縮進劃分層級
2.屬性用()表示,用逗號分隔
  *style={}
  *class=[]
3.內(nèi)容
  div xxx
    span xxx
      a(href="xxx") 鏈接
------------------------------------------------------------------------
jade.render('字符串');
jade.renderFile('模板文件名', 參數(shù))
-------------------------------------------------------------------------

render()用法

const jade = require('jade')
var str = jade.render('html')
// 加載jade文件
//var str = jade.renderFile('./views/1.jade', {pretty: true})
console.log(str)
輸出的結(jié)果:
image.png
html
  head
    style
  body
    div.box
    div#div1
html
  head
    style
  body
    div(title="aaa",id="div1")
    div&attributes({title: 'aaa', id: 'div1'})
html
  head
    style
  body
    div(style="width:200px;height:200px;background:red")
    div(style= {width: '200px', height: '200px', background: 'red'})
html
  head
    style
  body
    div(class="aaa left-warp active")
    div(class= ['aaa', 'left-warp', 'active'])

------------------13章---------------
14池摧、jade

第一種轉(zhuǎn)譯焦除,前面加‘|’, 如果不交jade默認(rèn) 是自定義標(biāo)簽(字母的情況下)
html
  head
    script
      |window.onload=function (){
      | var oBtn=document.getElementById('btn1');
      | oBtn.onclick=function (){
      |   alert('aaaa');
      | };
      |};
  body
    h1
      div 夜幕小草
        |bbb
第二種作彤,標(biāo)簽后邊加 ‘ . '膘魄,表示標(biāo)簽后邊的都是轉(zhuǎn)譯的
html
  head
    script.
      window.onload=function (){
       var oBtn=document.getElementById('btn1');
       oBtn.onclick=function (){
         alert('aaaa');
       };
      };
  body
    h1
      div
        |bbb
格式:include 文件名
html
  head
    script
      include a.js
  body
    |abc
    |ddd
    |213

a.js文件
window.onload=function (){
  var oBtn=document.getElementById('btn1');
  oBtn.onclick=function (){
    alert('aaaa');
  };
};
變量的輸入
6.jade
html
  head
  body
    div 我的名字:#{name}
    div 求和:#{a+b}
    div(style=json)
    div(class=arr class="active")
    div(class=arr)

jade.js文件
const jade = require('jade')
let str = jade.renderFile('./views/9.jade', {pretty: true, name: '夜幕小草', a: 22, b: 33,
  json: {width: '200px', height: '200px', background: 'red'},
  arr: ['aaa', 'left-wrap', 'bbb'],
  content: "<h2>你好啊</h2><p>對方水電費色弱威爾士地方</p>"
})
console.log(str)
注意:pretty: true表示美化代碼

7.jade文件 var前邊加 ‘-’
html
  head
  body
    -var a=12;
    -var b=5;
    div 結(jié)果是:#{a+b}
    span #{a}
    span=a
    -for(var i=0;i<arr.length;i++)
      div=arr[i]
    div!=content

8.jade文件 if else
html
  head
  body
    -var a=19;
    if(a%2==0)
      div(style={background:'red'}) 偶數(shù)
    else
      div(style={background:'green'}) 奇數(shù)

9.jade文件 switch
html
  head
  body
    -var a=1;
    case a
      when 0
        div aaa
      when 1
        div bbb
      when 2
        div ccc
      default
        |不靠譜
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乌逐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子创葡,更是在濱河造成了極大的恐慌浙踢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灿渴,死亡現(xiàn)場離奇詭異洛波,居然都是意外死亡,警方通過查閱死者的電腦和手機骚露,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門蹬挤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荸百,你說我怎么就攤上這事闻伶。” “怎么了够话?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長光绕。 經(jīng)常有香客問我女嘲,道長,這世上最難降的妖魔是什么诞帐? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任欣尼,我火速辦了婚禮,結(jié)果婚禮上停蕉,老公的妹妹穿的比我還像新娘愕鼓。我一直安慰自己,他們只是感情好慧起,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布菇晃。 她就那樣靜靜地躺著,像睡著了一般蚓挤。 火紅的嫁衣襯著肌膚如雪磺送。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天灿意,我揣著相機與錄音估灿,去河邊找鬼。 笑死馅袁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荒辕。 我是一名探鬼主播汗销,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼芒粹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了大溜?” 一聲冷哼從身側(cè)響起化漆,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钦奋,沒想到半個月后座云,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡付材,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年朦拖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厌衔。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡璧帝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出富寿,到底是詐尸還是另有隱情睬隶,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布页徐,位于F島的核電站苏潜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏变勇。R本人自食惡果不足惜恤左,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搀绣。 院中可真熱鬧飞袋,春花似錦、人聲如沸链患。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锣险。三九已至蹄皱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芯肤,已是汗流浹背巷折。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崖咨,地道東北人锻拘。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親署拟。 傳聞我的和親對象是個殘疾皇子婉宰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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