node.js中 koa 框架的基本使用方法

1、安裝 koaphp

npm install koa --save

  

2、簡單使用html

const koa = require('koa');
//注意使用koa須要new,跟express有點不一樣
let app = new koa();
app.listen(8888);

//use()方法將中間件加入應用中
app.use(async function (ctx, next) {
    //ctx.res 原生res
    //ctx.req 原生req
    //ctx.request 被koa包裝過的req對象
    //ctx.response 被koa包裝過的res對象
    ctx.response.body = 'ok';
});

//發生錯誤時觸發
app.on('error', function (err) {
    console.log(err);
});

  

3、級聯中間件的概念express

const koa = require('koa');
let app = new koa();
app.listen(8888);

app.use(async function (ctx, next) {
    console.log('1');
    await next();
    console.log('2');
});

app.use(async function (ctx, next) {
    console.log('3');
    await next();
    console.log('4');
});

app.use(async function (ctx, next) {
    console.log('5');
});

上述代碼最終會打印出 1 3 5 4 2,koa中間件裏的 await next() 以前的代碼會一級一級向下執行,直到沒有更多中間件執行,而後再像棧同樣的執行 await next() 以後的代碼。npm

 

4、獲取get請求參數緩存

const koa = require('koa');
const router = require('koa-router');
let app = new koa();
let route = new router();
app.listen(8888);

route.get('/:id', function (ctx, next) {
    //獲取請求方法
    console.log(ctx.method);
    //獲取請求URL
    console.log(ctx.url);
    //獲取請求路徑
    console.log(ctx.path);
    //獲取請求查詢字符串對象
    console.log(ctx.query);
    //獲取請求查詢字符串
    console.log(ctx.querystring);
    //獲取路由參數
    console.log(ctx.params);
    //獲取請求頭對象
    console.log(ctx.headers);
});

app.use(route.routes());

  

5、獲取post表單數據和文件上傳cookie

安裝 koa-better-body 用於解析session

npm install koa-better-body --save
npm install koa-convert --save

 注意使用 koa-better-body 須要用 koa-convert 轉換一下。app

const fs = require('fs');
const path = require('path');
const koa = require('koa');
const router = require('koa-router');
const betterBody = require('koa-better-body');
const convert = require('koa-convert');
let app = new koa();
let route = new router();
app.listen(8888);

//使用koa-better-body須要用koa-convert轉一下
app.use(convert(betterBody({
    //指定上傳的目錄
    uploadDir: path.join(__dirname, 'uploads'),
    //是否保留擴展名
    keepExtensions: true,
    //設置上傳文件大小最大限制,默認2M
    maxFileSize: 1024 * 1024 * 1024
})));

route.get('/', function (ctx, next) {
    ctx.response.set('Content-Type', 'text/html;charset=utf-8');
    ctx.body = fs.readFileSync('./index.html');
});

route.post('/post', function (ctx, next) {
    //post表單數據
    console.log(ctx.request.fields);
    //上傳文件的詳細信息
    console.log(ctx.request.files);
});

app.use(route.routes());

index.html的代碼:dom

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表單</title>
</head>
<body>
<form action="http://localhost:8888/post" method="post" enctype="multipart/form-data">
    用戶名:<input type="text" name="name"><br>
    密碼:<input type="password" name="pwd"><br>
    頭像:<input type="file" name="head"><br>
    信息1:<input type="file" name="info"><br>
    信息2:<input type="file" name="info"><br>
    <input type="submit" name="提交">
</form>
</body>
</html>

  

 6、路由中間件 koa-routerkoa

npm install koa-router --save

路由是能夠設置多級的,能夠嵌套。方便咱們自由拆分。

const koa = require('koa');
const router = require('koa-router');
let app = new koa();
app.listen(8888);

let users = new router();
let order = new router();

users.get('/', function (ctx) {
    ctx.body = '用戶頁面';
});

users.get('/add', function (ctx) {
    ctx.body = '用戶添加頁面';
});

order.get('/', function (ctx) {
    ctx.body = '訂單頁面';
});

order.get('/add', function (ctx) {
    ctx.body = '訂單添加頁面';
});

let route = new router();
route.use('/users', users.routes());
route.use('/order', order.routes());
app.use(route.routes());

  

7、cookie的設置與讀取

koa中能夠直接經過 ctx.cookies.set() 或 ctx.cookies.get() 進行設置和獲取cookie

const koa = require('koa');
const router = require('koa-router');
let app = new koa();
app.listen(8888);

//設置cookie簽名加密時,須要配置密鑰
app.keys = [
    '2dsfjo3rt3pt934rjh2'
];

let route = new router();

route.get('/', function (ctx, next) {

    //參數一表示,cookie名稱
    //參數二表示,cookie的值
    //參數三表示,cookie的配置選項
    ctx.cookies.set('test', 'test', {
        //cookie所在的域名
        domain: 'localhost',
        //cookie所在的路徑
        path: '/',
        //有效時間,單位毫秒
        maxAge: 3600 * 1000,
        //失效時間
        expires: new Date(Date.now() + 3600 * 1000),
        //是否只能在http中獲取
        httpOnly: true,
        //是否容許重寫
        overwrite: true
    });

    //設置cookie是否簽名加密,若是設置簽名加密,需配置app.keys
    ctx.cookies.set('name', 'xiaoxu', {signed: true});

    //獲取cookie
    console.log(ctx.cookies.get('test'));
    console.log(ctx.cookies.get('name'));
});

app.use(route.routes());

  

8、session的使用

安裝 koa-session 中間件

npm install koa-session --save

koa-session默認會話是基於cookie實現的,固然會話信息也能夠保存到其它地方。

const koa = require('koa');
const router = require('koa-router');
const session = require('koa-session');
let app = new koa();
app.listen(8888);

//設置簽名加密的密鑰
app.keys = [
    'rj345jptjgadsfjeasltrg'
];

let route = new router();

//使用koa-session中間件
app.use(session({
    //cookie的名稱
    key: 'session',
    //有效時間
    maxAge: 3600 * 1000,
    //是否自動提交頭信息
    autoCommit: true,
    //是否充許重寫
    overwrite: true,
    //是否只能http獲取
    httpOnly: true,
    //是否簽名加密
    signed: true
}, app));

route.get('/', function (ctx, next) {
    if (ctx.session.count) {
        ++ctx.session.count;
    } else {
        ctx.session.count = 1;
    }
    ctx.body = `您是第 ${ctx.session.count} 次訪問`;
});

app.use(route.routes());

  

9、模板引擎ejs的使用

npm install koa-ejs --save

經過ejs模板引擎,咱們能夠很方便的渲染頁面。

const path = require('path');
const koa = require('koa');
const router = require('koa-router');
const ejs = require('koa-ejs');
let app = new koa();
app.listen(8888);

let route = new router();

//模板引擎配置
ejs(app, {
    //模板目錄
    root: path.join(__dirname, 'views'),
    //佈局文件
    layout: false,
    //模板擴展名
    viewExt: 'html',
    //是否開啓緩存
    cache: false,
    //是否開啓調試信息
    debug: true
});

route.get('/', async function (ctx, next) {
    await ctx.render('index', {
        name: 'xiaoxu',
        age: 24
    });
});

app.use(route.routes());

  

10、靜態資源中間件

咱們使用 koa-static-cache 這個中間件。

npm install koa-static-cache --save

使用 koa-static-cache 幫咱們處理靜態資源

const path = require('path');
const koa = require('koa');
const static = require('koa-static-cache');
let app = new koa();
app.listen(8888);

//使用中間件,並配置靜態資源目錄
app.use(static(path.join(__dirname, 'public'), {
    //是否壓縮文件
    gzip: true,
    //緩存有效時間
    maxAge: 60
}));
相關文章
相關標籤/搜索