koa2入門使用總結

koa2的介紹

Koa 是一個新的 web 框架,由 Express 幕後的原班人馬打造, 致力於成爲 web 應用和 API 開發領域中的一個更小、更富有表現力、更健壯的基石。 經過利用 async 函數,Koa 幫你丟棄回調函數,並有力地加強錯誤處理。 Koa 並無捆綁任何中間件, 而是提供了一套優雅的方法,幫助您快速而愉快地編寫服務端應用程序。html

koa2安裝

npm install koa

koa middleware

每收到一個http請求,koa就會調用經過app.use()註冊的async函數,並傳入ctx和next參數
middleware的順序很重要,也就是調用app.use()的順序決定了middleware的順序node

對於await next(),若是一個middleware沒有調用,則後續的middleware將再也不執行了,使用場景
如,一個檢測用戶權限的middleware能夠決定是否繼續處理請求,仍是直接返回403錯誤git

app.use(async (ctx, next) => {
    if (await checkUserPermission(ctx)) {
        await next();
    } else {
        ctx.response.status = 403;
    }
});

ctx簡寫github

ctx.url至關於ctx.request.url,ctx.type至關於ctx.response.type

url處理 ,使用koa-router

安裝koa-routerweb

npm install koa-router
// 注意require('koa-router')返回的是函數:
const router = require('koa-router')();

這裏導入koa-router的語句最後的()是函數調用
const router = require('koa-router')();
至關於 
const fn_router = require('koa-router');
const router = fn_router();


// add url-route:
router.get('/hello/:name', async (ctx, next) => {
    var name = ctx.params.name;
    ctx.response.body = `<h1>Hello, ${name}!</h1>`;
});

router.get('/', async (ctx, next) => {
    ctx.response.body = '<h1>Index</h1>';
});

// add router middleware:
app.use(router.routes());

這樣咱們在訪問http://localhost:3000/hello/kerry時會打印hello,kerrynpm

處理post請求

post請求一般會發送一個表單,或者JSON,它做爲request的body發送,但不管是Node.js提供的原始request對象,仍是koa提供的request對象,都不提供解析request的body的功能,因此咱們須要用到koa-bodyparser中間件來解析request的bodyjson

安裝koa-bodyparser跨域

npm install koa-bodyparser
const bodyParser = require('koa-bodyparser');

// 解決body 需在router以前註冊到app對象上
app.use(bodyParser());


這樣咱們就能夠處理post請求了
router.get('/', async (ctx, next) => {
    ctx.response.body = `<h1>Index</h1>
        <form action="/signin" method="post">
            <p>Name: <input name="name" value="koa"></p>
            <p>Password: <input name="password" type="password"></p>
            <p><input type="submit" value="Submit"></p>
        </form>`;
});

router.post('/signin', async (ctx, next) => {
    var
        name = ctx.request.body.name || '',
        password = ctx.request.body.password || '';
    console.log(`signin with name: ${name}, password: ${password}`);
    if (name === 'koa' && password === '12345') {
        ctx.response.body = `<h1>Welcome, ${name}!</h1>`;
    } else {
        ctx.response.body = `<h1>Login failed!</h1>
        <p><a href="/">Try again</a></p>`;
    }
});

代碼優化

全部的代碼都放在了app.js中
咱們能夠單獨將全部路由放到一個js文件中,若是是複雜系統,還能夠按模塊創建多個路由文件,如
user.js(處理用戶管理相關url)、login.js(處理用戶登陸相關url)服務器

靜態資源

安裝koa-staticapp

npm install koa-static
const static = require('koa-static')
const path = require('path')

// 靜態資源目錄
app.use(static(
  path.join( __dirname,'./static')
));

咱們在根目錄下創建static文件夾,新建一個json文件,輸入以下地址訪問

http://localhost:3000/china.geojson

art-template模板引擎

npm install --save art-template
npm install --save koa-art-template


// 模板引擎
const render = require('koa-art-template');

render(app, {
  root: path.join(__dirname, './static'),
  extname: '.html',
  // debug: process.env.NODE_ENV !== 'production'
});

// 使用ctx.render渲染頁面 可傳遞數據
router.get('/user', async (ctx, next) => {
    ctx.render('user',{
            data:'hello msg'
    });
});

html中渲染數據 {{data}}

更多用法查看
https://aui.github.io/art-template/zh-cn/docs/index.html

koa2 跨域請求設置

https://github.com/zadzbw/koa2-cors
npm install --save koa2-cors

var cors = require('koa2-cors');
app.use(cors());

開發部署 ,使用nodemon在本地開發環境下自動重啓項目

一、 項目搭建好後,經過node運行

node app.js

也能夠在package.json中添加scripts

"scripts": {
    "start": "node app.js"
}

這樣就能夠運行

npm run start

而後訪問http://localhost:3000

二、 經過nodemon來運行項目

npm install -g nodemon

以後用 nodemon 來代替 node 來啓動應用

nodemon app.js

三、 若是是在線上 咱們則使用pm2來管理應用程序,
pm2 是一個帶有負載均衡功能的Node應用的進程管理器.當你要把你的獨立代碼利用所有的服務器上的全部CPU,並保證進程永遠都活着,0秒的重載, PM2是完美的
http://www.javashuo.com/article/p-spesurcc-ky.html

最後

經過以上簡單介紹對koa2使用,我搭建了一個koa2本地靜態node服務器,已上傳至github,歡迎你們star或clone
koa2-server

相關文章
相關標籤/搜索