Koa 是一個新的 web 框架,由 Express 幕後的原班人馬打造, 致力於成爲 web 應用和 API 開發領域中的一個更小、更富有表現力、更健壯的基石。 經過利用 async 函數,Koa 幫你丟棄回調函數,並有力地加強錯誤處理。 Koa 並無捆綁任何中間件, 而是提供了一套優雅的方法,幫助您快速而愉快地編寫服務端應用程序。html
npm install koa
每收到一個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
安裝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請求一般會發送一個表單,或者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
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
https://github.com/zadzbw/koa2-cors npm install --save koa2-cors var cors = require('koa2-cors'); app.use(cors());
一、 項目搭建好後,經過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