github: https://github.com/noyanse1023/learn-koa2019.git
koa 断点调试:
在vscode中在要调试的文件界面按下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.执行简单的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.执行node main.js
可以安装热nodemon 自动编译
npm i nodemon --save-dev
在package.json中写
"scripts": {
"start": "nodemon index.js"
},
执行 npm start 就可以自动编译啦~~
3.搭建路由与Controller
Koa本质上是调用一系列的中间件,来处理对应的请求,并决定是否传递到下一个中间件去处理。我们来写一个最简单的中间件试试。
/*
//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 就是最简单的一个中间件,接受了请求,读出请求路径,并返回到客户端。
- 所以,接口的本质,就是判断不同的请求链接,干不同的事情,返回相应的结果。那么我们得需要一个路由中间件
koa-router
来处理分发请求
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: '学长',
sex: 'man',
age: '27'
}
}
}
网友评论