koa2入门

2018-08-02  本文已影响0人  noyanse

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}`
})
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'
        }

    }
}
上一篇 下一篇

猜你喜欢

热点阅读