express基本使用和一些經常使用中間件

基本使用

建立服務:

在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

中間件

express.static()

這是一個用來返回靜態文件的自帶中間件,不須要下載
就是一方法,直接往use()裏面加
express.static(root, [options]) 第一個參數是靜態文件存儲的目錄服務器

let server = express();//建立server,直接調用函數就行
server.use(express.static('./static/'));
server.listen('8080');
複製代碼

處理以後,前端就能夠在root目錄中訪問靜態文件了cookie

body-parser:

用於解析post數據,這玩意er執行後會往req裏面塞一個body,body裏面就有處理好的數據session

//全部的post請求都通過這個中間件
server.post('*',parser.urlencoded({
  extended: false //給個屬性,通常不開
}))
server.post('/reg',(req,res) => {
  console.log(req.body);//在這就能夠使用解析好的body數據
})
複製代碼

multer:處理文件上傳

添加以後,會往req加一個files屬性

const multer = require('multer')
let obj = multer({
  dest: '上傳的文件所放的路徑'
})
server.post(obj.any());//添加以後,會往req加一個files屬性
複製代碼

cookie-parser

用來操做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: 可選擇添加的配置

  • domain:域名
  • path:路徑,通常給個/
  • maxAge:最大時長
  • httpOnly:true 只有服務器能看到
  • secure: true //只有https能用
  • signed:true //是否簽名

cookie-session:

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訪問服務器

相關文章
相關標籤/搜索