koa.js的使用(koa2)

2020-05-28  本文已影响0人  蜗牛的学习方法

koa与Express简单比较
Express connect 中间件 封装了 路由、视图,
koa co中间件 不包含任何中间件 callback ,需要自己手动引入中间件

koa具有体积小的特点

1、首先新建一个文件夹,下载koa插件

yarn add koa
新建一个my-koa-app.js,编写一个helloWorld的实例。

const Koa = require('koa');
//创建koa实例
const app = new Koa();

//配置路由
app.get('/index',async ctx => {
  console.log(ctx.url)
  ctx.body = '首页';
});

app.listen(8082,()=>{
  console.log('接口已启动')
});

这样一个简单的koa的例子就完成了。

2、koa-router 路由 根据不同的路由获取不同的参数

首先还是要安装koa-router
yarn add koa-router

const Koa = require('koa');
const Router=require('koa-router')
//创建koa实例
const app = new Koa();
const router=new Router();

//配置路由
//静态路由 /index?title  
router.get('/',async ctx=>{
  //ctx 包含了request response
  //获取参数的两种方式 
  //query 是一个对象  querystring() 是一个字符串
  console.log(ctx.request.query)
  console.log(ctx.request.querystring)
  //推荐用法
  console.log(ctx.query)
  console.log(ctx.querystring)
  ctx.body='首页'
})

//动态路由  /index/12
router.get('/about/:id',async ctx=>{
  console.log(ctx.params)
  ctx.body='介绍页面'
})
//启动路由
app
.use(router.routes())
.use(router.allowedMethods()) //官方推荐

app.listen(8082,()=>{
  console.log('接口已启动')
});

结果:


image.png

3、koa中间件与模板的渲染

中间件是koa的精髓,中间件容器是负责各个组件和服务的关联和交互
中间件的执行方式比较像’洋葱模型‘

中间件类型
末班引擎
//yarn add koa-views ejs
const Koa = require('koa');
const Router = require('koa-router');
const views = require('koa-views');

const app = new Koa();
const router = new Router();

app.use(
  views('page',{
    map:{html:'ejs'}
  })
)

router.get('/', async (ctx, next) => {
  console.log('路由级中间件1');
  await next();
});

router.get('/', async (ctx) => {
  const txt='nihao'
  console.log('路由级中间件2');
  await ctx.render('index',{txt});

});

//应用级中间件
app.use(async (ctx, next) => {

  ctx.state.commondata='我是公共数据,每个页面都可以使用'
  console.log('应用级中间件');
  await next();

  if (ctx.status == 404) {
    ctx.body = '404页面';
  }
});

//使用中间件
app.use(router.routes()).use(router.allowedMethods());

app.listen(8082);

page/index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <p><%=commondata%></p>
  <p><%=txt%></p>
</body>

</html>

结果:


image.png
上一篇 下一篇

猜你喜欢

热点阅读