目錄
5.1context 將node中的request和response 封裝到一個對象中,並提供一些新的api提供給用戶進行操作;
5.2.1koa會把ctx.requset上的屬性直接掛載到ctx上如:
5.2.2同樣也會把ctx.response上的屬性直接掛載到ctx上如:
6.3Koa-router推薦使用RESTful架構API。
1.課堂目標及知識點
課堂目標
- npm包管理器使用
- koa使用
- 瞭解koa中的applition對象及context對象
- koa-views使用
- koa-static使用
- 使用koa-router中間件搭建路由
- 瞭解常見http狀態碼
本節知識點
- http模塊實現模板加載及靜態文件處理
- koa的安裝及使用
- Application及context對象介紹
- 常用http狀態碼介紹
- 路由中間件koa-router介紹
- 中間件koa-views介紹
2.koa介紹
koa是express原班人馬打造的輕量、健壯、富有表現力的nodejs框架。目前koa有koa1和koa2兩個版本;koa2依賴Node.js 7.6.0或者更高版本;koa不在內核方法中綁定任何中間件,它僅僅是一個輕量級的函數庫,幾乎所有功能都必須通過第三方插件來實現。
3.koa使用
3.1koa安裝
$ npm i koa
3.2一個簡單的koa服務器
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
3.3Koa 利用中間件 控制"上游",調用"下游“;
- koa是包含一組中間件函數的對象;可以將app.use裏的函數理解成中間件
//這裏的middleWare函數就是一箇中間件
let middleWare = async (ctx,next)=>{
console.log("first middleWare");
ctx.body = "hello world";
}
app.use(middleWare);
- 通過next()將控制轉交給另一箇中間件;
- 上述過程也可以通過"洋蔥模型“來解釋中間件執行順序
4.Application對象
- application是koa的實例 簡寫app
- app.use 將給定的中間件方法添加到此應用程序,分爲同步和異步,異步:通過es7中的async和await來處理
- app.listen設置服務器端口;
- app.on 錯誤處理;
5.上下文context對象常用屬性及方法
5.1context 將node中的request和response 封裝到一個對象中,並提供一些新的api提供給用戶進行操作;
- ctx.app:應用程序實例引用,等同於app;
- ctx.req:Node 的
request
對象. - ctx.res:Node 的
response
對象. - ctx.request:koa中的Request對象;
- ctx.response:koa中的response對象;
- ctx.state:對象命名空間,通過中間件傳遞信息;
- ctx.throw:拋出錯誤;
5.2request及response別名
5.2.1koa會把ctx.requset上的屬性直接掛載到ctx上如:
…...
ctx.header
//頭信息;ctx.headers
ctx.method
ctx.method=
ctx.url
ctx.url=
5.2.2同樣也會把ctx.response上的屬性直接掛載到ctx上如:
….
ctx.body
ctx.body=
ctx.status
ctx.status=
5.2.3ctx.status 獲取響應狀態。
默認情況下,response.status
設置爲 404
而不是像 node 的 res.statusCode
那樣默認爲 200
。
5.2.4http狀態碼
-
http狀態碼:1xx(消息)、2xx(成功)、3xx(重定向)、4xx(請求錯誤)、5xx和6xx(服務器錯誤)
-
常見http狀態碼 (302 location 跳轉)
HTTP狀態碼 描述 100 繼續。繼續響應剩餘部分,進行提交請求 200 成功 301 永久移動。請求資源永久移動到新位置 302 臨時移動。請求資源零時移動到新位置 304 未修改。請求資源對比上次未被修改,響應中不包含資源內容 401 未授權,需要身份驗證 403 禁止。請求被拒絕 404 未找到,服務器未找到需要資源 500 服務器內部錯誤。服務器遇到錯誤,無法完成請求 503 服務器不可用。零時服務過載,無法處理請求
6.koa常用中間件——koa-router
-
路由是引導匹配之意,是匹配url到相應處理程序的活動。
6.1koa-router安裝
npm i koa-router -S
6.2Koa-router使用
6.3Koa-router推薦使用RESTful架構API。
Restful的全稱是Representational State Transfer 即表現層轉移。
- RESTful是一種軟件架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件。基於這個風格設計可以更簡潔,更有層次;
- 非RESTful架構api:
- 使用RESTful架構設計api
REST設計一般符合如下條件:
- 程序或者應用的事物都應該被抽象爲資源
- 每個資源對應唯一的URI(uri是統一資源標識符)
- 使用統一接口對資源進行操作
- 對資源的各種操作不會改變資源標識
- 所有操作都是無狀態的
7.koa常用中間件——koa-views
Koa-views用於加載html模板文件;
-
安裝 koa-views
npm i koa-views -S
-
使用koa-view
8.koa常用中間件——koa-static
-
koa-static 是用於加載靜態資源的中間件,通過它可以加載css、js等靜態資源;
-
安裝 koa-static
npm i koa-static
-
使用koa-static
const static = require("koa-static");
app.use(static(__dirname+"/static")) //加載靜態文件的目錄
9.koa常用中間件——模板引擎pug
9.1模板引擎
模板引擎是web應用中動態生成html的工具,負責將數據和模板結合。常用的模板引擎有ejs 、jade(現更名pug)、Handlebars、Nunjucks、swig 等,每種模板引擎功能類似,語法不同。
參見:https://blog.csdn.net/qq_34569497/article/details/105650058
9.2安裝pug
npm i pug -g
9.3pug常用語法
- pug語法:通過縮進關係,代替以往html的層級包含關係,如 個簡單的靜態 可以表達爲,注意要統一使用tab或者空格縮進,不要混用
- 內聯書寫層級,a: img
- style屬性:div(style={width:”200px”,color:”red”})
- 使用”-”來定義變量,使用“=”把變量輸出到元素內;
- 通過 #{variable} 插 相應的變量值
- html 元素屬性通過在標籤右邊通過括號包含(可以通過判斷來添加)
- 文本通過在 字前 添加豎線符號“|”可讓 jade 原樣輸出內容 在html標籤標記後 通過空格隔開 本內容 在html標籤標記後通過添加引號“.”添加塊級文本
- 註釋:可以通過雙斜槓進 註釋,jade有3種註釋 式,可以分別對應輸出html 註釋、 輸出html註釋、塊級html註釋
- 循環:each val in [1,2,3]
- 判斷語句:”if else” case when default
- mixin:混合模式
- include common/footer.pug 通過include引入外部文件
9.4練習工具 hade
npm i hade -g