KOA框架概念入门

首先简单介绍一下koa,想必大家都听过express框架的大名了,koa是Express框架的原班人马打造的新型框架,代码更少,使用更方便,反正我是这么认为的,后面出的总是要好的,哈哈。koa现在也已经出到了2.x版本,这个版本支持了es7的写法,可以肆无忌惮的使用async来用同步的方式编写异步代码了。

Application

看代码:

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);

这段代码中有一个 app对象,这个就是Application.一个应用只会有一个Application对象,

koa官网是这么介绍的,Koa应用程序是一个对象,它包含了一系列的中间件(说白了,就是个方法),它们以类似于堆栈的方式在请求时进行组合和执行。

app.use就是将中间件push到了一个数组中,有请求来了就会执行这个方法。

app.context这个和ctx是一个原型,相通的。我们可以通过编辑app.context来添加一系列的属性。这个很有用,可以减少很多require()的使用,也不用多使用一个中间件来给ctx赋值了(中间件都有ctx参数)。一朝赋值,全盘可用。

app.context.db = db();

app.use(async ctx => {
  console.log(ctx.db);
});

赋值了以后就可以在中间件的ctx参数中使用了。

Context

每当服务器接收到一个请求,应用程序都会实例化一个context对象,他封装了request和response对象,由于操作频繁,所以直接将这两个对象放到了这个级别来使用。

使用起来如下:

app.use(async ctx => {
  ctx; // is the Context
  ctx.request; // is a koa Request
  ctx.response; // is a koa Response
});

官方提供了一个命名空间来赋值变量供其他模块使用,可以在中间件中组合使用。

app.use(async (ctx, next) => {
    var user = tryGetUserFromCookie(ctx.request);
    if (user) {
        ctx.state.user = user;
        await next();
    } else {
        ctx.response.status = 403;
    }
});

渲染UI的时候都要给UI组件传一个model(数据对象)过去。如果写了上述代码,每次都要把user信息拼接到model中吗?肯定不是的。

Object.assign({}, ctx.state || {}, model || {})

首先,model || {}确保了即使传入undefined,model也会变为默认值{}。Object.assign()会把除第一个参数外的其他参数的所有属性复制到第一个参数中。第二个参数是ctx.state || {},这个目的是为了能把一些公共的变量放入ctx.state并传给View。

ctx.req,ctx.res是Node的对应对象。

值得注意的是,绕过koa的相应处理是不被支持的。所以下列操作要避免使用。

res.statusCode()
rst.wirteHead() 
res.wirte() 
res.end()

ctx.response,ctx.request是koa的对应对象。

ctx.app

Application的引用

ctx.throw

ctx.throw(400, ‘name required’)

更多的使用如Response以及Request参加官网即可

http://koajs.com/

猜你喜欢

转载自blog.csdn.net/run_youngman/article/details/78741146