路由
- 路由結構,
app.method(path,[calback...],callback)
- path,服務器上的路徑
- callback,當路由匹配時要執行的函數
- 路由路徑
- 字符串,
app.get('/about,function(req,res){...})
- 字符串模式
- 正則表達式
- 字符串,
- 路由句柄
- 可以是一個函數
app.get('/',function(req,res){ res.send("hello") })
- 可以是一個函數數組(要有next對象)
app.get('/a',function(req,res,next){ consol.log('first'); next(); },function(req,res){ res.send('second'); }) #這兩個函數可以獨立出來,然后傳入參數的時候傳入一個數組,由函數名組成的數組就可以,當然要有next()
- 響應方法
res.download() res.end()//終結相應處理流程 res.json()//發送一個json格式的響應 res.jsonp() res.redirect()//重定向請求 res.render()//渲染視圖模板 res.send()//發送各種類型的響應 res.sendFile()//以八位字節流的形式發送文件 res.sendStatus()//設置響應狀態代碼,并將其一字符串形式作為響應體的一部分發送
-
app.route()
,創建路由路徑的鏈式路由句柄,也就是說規定了一個路由,然后后面鏈式調用get,post等方法,有助于創建模塊化的路由app.route('/book') .get(function(req,res){ res.send('get method') }) .post(function(req,res{ res.send('post method') })) .put(...)
-
express.Router
,創建模塊化、可掛載的路由句柄。Router實例是一個完整的中間件和路由系統。
中間件
- 解釋:中間件是一個函數,可以訪問請求對象、響應對象和web應用中處于請求-響應循環流程中的中間件(也就是被命名為next的變量)
- 應用級中間件
- 一般形式
app.use()
和app.METHOD()
//沒有掛載路徑的中間件,應用的每個請求都會執行該中間件 app.use(function(req,res,next){ console.log('middleware') next() }) //掛載到/user上面的中間件,任何指向他的請求都會執行下面的函數 app.use('/user',function(req,res,next){ console.log('use') next() }) //路由和句柄函數(中間件系統),處理指向/user的GET請求,如果不是GET不執行!!! app.get('/user',function(req,res){ res.send('GET'); }) //掛載一組中間件 app.use('/user',function(req,res,next){ console.log('first'); next() },function(req,res,next){ console.log('second'); next() })
- 一般形式
- 路由級中間件
- 它綁定的對象為express.Router(),
var router = express.Router()
上面中間級改為路由級,就是將app改為router即可 router.use(function(req,res,next){ console.log('router'); next() })
- 它綁定的對象為express.Router(),
- 錯誤處理中間件
- 有四個參數,定義錯誤處理中間件的時候必須使用這四個參數,即使不用,也得全寫!不然中間件會被識別為一個常規的中間件,不能處理錯誤。
app.use(function(err,req,res,next){ console.error(err.stack); res.status(500).send('somthing broke!') })
- 內置中間件
- 唯一的內置中間件
express.static(root,[options])
,負責在Express應用中托管靜態資源,root是提供靜態資源的根目錄,options參數的屬性看文檔
app.use(express.static('public'))
- 唯一的內置中間件
- 第三方中間件(npm install)
- 例如cookie-parser
模版引擎
- 需要進行的設置
- views,放模版文件的目錄,使用:
app.set('views','./fileName)
- view engine,模版引擎, 使用:`app.set('vies engine','jade')
- views,放模版文件的目錄,使用: