在node環境下,npm i -D express,就能在node中使用express這一框架了。直接引入express模塊,引入的是一個函數,直接調用,返回值就是一個服務,而後監聽一個端口就完成了javascript
const express = require('express')
let server = express();//不須要new,koa須要new
server.listen(8080);
複製代碼
express 自帶路由,只要調用server的get,post,和use方法,就能夠實現路由,路由參數也能夠傳*,表示處理全部路徑的請求,use方法不傳路徑也表示處理全部路徑的請求前端
server.get('url',fn);//處理get請求
server.post('url',fn);//處理post請求
server.use('url',fn);//處理全部請求
server.use(fn);//處理全部地址的全部請求
複製代碼
這三個方法有兩個參數,第一個表示路由路徑,第二個是回調函數,通過這個路徑的某一個(get,post,全部)請求所有由這個回調函數處理。java
回調函數有三個參數:req、res和next,req和res相似原生node的req和res,添加了一些新方法。
next參數用於執行後面的相匹配的路由node
server.get('url',(req,res,next) => {//3個參數,調用next()執行後面的匹配url的路由
res.send();//發數據,也能夠發json,自帶end()
})
複製代碼
當一個路徑能夠被多個路由匹配到的是有,先執行最早匹配到的路由回調函數,在該函數中調用next方法,繼續匹配後面的路由express
server.get('/a',(req,res,next) => {//處理路徑爲a的get請求
console.log('a1');
next()//執行下一個匹配的路由
});
server.get('/a',(req,res,next) => {//處理路徑爲a的get請求
console.log('a2');
res.send('over');
});
server.listen('8080');
複製代碼
上面的代碼,訪問路徑a後, a1和a2都會被打印npm
這也是中間件的實現原理:
數據 -> server.use(中間件) -> 中間件處理全部數據 -> 處理好的數據放入req或res中(req.xxx=data) -> 調用next放行 -> 後面匹配的路由能夠在req或res中獲得想要的處理好的數據(req.xxx)json
這是一個用來返回靜態文件的自帶中間件,不須要下載
就是一方法,直接往use()裏面加
express.static(root, [options]) 第一個參數是靜態文件存儲的目錄服務器
let server = express();//建立server,直接調用函數就行
server.use(express.static('./static/'));
server.listen('8080');
複製代碼
處理以後,前端就能夠在root目錄中訪問靜態文件了cookie
用於解析post數據,這玩意er執行後會往req裏面塞一個body,body裏面就有處理好的數據session
//全部的post請求都通過這個中間件
server.post('*',parser.urlencoded({
extended: false //給個屬性,通常不開
}))
server.post('/reg',(req,res) => {
console.log(req.body);//在這就能夠使用解析好的body數據
})
複製代碼
添加以後,會往req加一個files屬性
const multer = require('multer')
let obj = multer({
dest: '上傳的文件所放的路徑'
})
server.post(obj.any());//添加以後,會往req加一個files屬性
複製代碼
用來操做cookie
const cookieParser = require('cookie-parser');//一個方法
server.use(cookieParser());//使用以後可以使用req.cookie()方法,req.signedCookies
server.get('/a',(req,res) => {
console.log(req.cookies);
res.cookie('a',998);//用於設置cookie
res.send('over');
})
複製代碼
cookie方法的使用:
res.cookie(鍵,值)
res.cookie(鍵,值,{options})
options: 可選擇添加的配置
express中用於處理session的中間件
const cookieSession = require('cookie-session');
server.use(cookieSession({
keys:['1sfdsa44','asdfdaf'...]//循環密鑰
maxAge:多久過時
}))
複製代碼
使用以後能夠使用req.session['鍵']獲取或設置session
關於cookie和session的理解:
用戶的cookie -> 服務器的密鑰簽名 -> session_id -> 經過cookie+session_id訪問服務器 -> 使用密鑰校驗cookie和session_id是否匹配
session就像一張身份證,防止有人僞造cookie訪問服務器