在智能社上聽了一些關於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')