github: https://github.com/noyanse1023/learn-koa2019.git
koa 斷點調(diào)試:
在vscode中在要調(diào)試的文件界面按下F5就啟動了
mac 小技巧
https://www.cnblogs.com/hongrunhui/p/5928833.html
參考:https://segmentfault.com/a/1190000009494041
1.初始化項目
1.mkdir koa //新建koa文件夾
2.cd koa
3.npm init //初始化
4.npm install koa --save
2.執(zhí)行簡單的demo
1.touch main.js //新建main.js文件
2.在main.js中輸入:
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
3.執(zhí)行node main.js
可以安裝熱nodemon 自動編譯
npm i nodemon --save-dev
在package.json中寫
"scripts": {
"start": "nodemon index.js"
},
執(zhí)行 npm start 就可以自動編譯啦~~
3.搭建路由與Controller
Koa本質(zhì)上是調(diào)用一系列的中間件,來處理對應(yīng)的請求孕似,并決定是否傳遞到下一個中間件去處理。我們來寫一個最簡單的中間件試試。
/*
//main.js代碼
app.use(async ctx => {
ctx.body = 'Hello World';
});
*/
//改成
app.use(ctx => {
ctx.body = `Your website url is:${ctx.request.url}`
})
- 這段代碼中,app.use 的 function 就是最簡單的一個中間件畔柔,接受了請求甜奄,讀出請求路徑,并返回到客戶端赏淌。
- 所以,接口的本質(zhì)鸟废,就是判斷不同的請求鏈接猜敢,干不同的事情,返回相應(yīng)的結(jié)果盒延。那么我們得需要一個路由中間件
koa-router
來處理分發(fā)請求
npm install koa-router --save //安裝路由中間件
main.js:
const Koa = require('koa')
const Router = require('koa-router')
const app = new Koa()
const router = new Router()
router.get('/', ctx => {
ctx.body = `這是主頁`
})
router.get('/user', ctx => {
ctx.body = `這是user頁`
})
router.get('/post', ctx => {
ctx.body = ctx.request.body
})
router.get('/async', async ctx => {
const sleep = async (ms) => {
return new Promise(resolve => {
setTimeout(() => {
resolve(true)
}, ms)
})
}
await sleep(1000)
ctx.body = `這是異步處理頁`
})
app
.use(router.routes())
.use(router.allowedMethods())
app.listen(3000)
處理 post
請求缩擂,要用中間件bodyparser
npm install koa-bodyparser --save
做一下模塊化處理
-koa
-node_modules
-controller
user.js
-main.js
-router.js
-package.json
main.js:
const Koa = require('koa');
const bodyParser = require('koa-bodyparser')
const app = new Koa();
const router = require('./router')
app.use(bodyParser())
app
.use(router.routes())
.use(router.allowedMethods())
app.listen(3000);
console.log('server is running at port 3000......')
routers:
const Router = require('koa-router')
const router = new Router()
const user = require('./controller/user')
router.post('/user/login',user.login)
router.get('/user/profile',user.profile)
module.exports = router
controller/user.js:
const sleep = async (ms) => {
return new Promise(reslove => {
setTimeout(() => {
reslove(true)
})
},ms)
}
module.exports = {
login(ctx) {
ctx.body = {
username: ctx.request.body.username
}
},
async profile(ctx) {
await sleep(1000)
ctx.body = {
username: '學(xué)長',
sex: 'man',
age: '27'
}
}
}