Koa
- Koa是 Node.js 平台开发的Web开发框架,是 express 原班人马打造的。
- 在 Koa 里面,所有的操作都是基于中间件来使用的。
express 里面也有中间件,那么 Koa 里面的中间件和 express 里面的中间件有什么区别呢?
- express 的中间件是基于
layer 层的模型
- Koa 中的中间件事基于
洋葱的模型
Koa 中间件的使用
- Koa 的中间件 use 传递的是一个 async 函数
- 参数1:ctx 是 context 的简称,也叫上下文,ctx 里面包含了请求头(request)和响应头(response)。
- 参数2:next代表的下一个要执行的中间件
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
console.log(ctx.request);
next();
});
app.use(async (ctx, next) => {
console.log('fn2');
});
app.listen(3000, function (error) {
console.log(error);
console.log('server is running at 3000!');
});
console.log(ctx.request);
console.log(ctx.request.url);
console.log(ctx.request.method);
console.log(ctx.req.url);
console.log(ctx.req.method);
console.log(ctx.url);
console.log(ctx.method);
ctx.body = 'Hello World';
ctx.response.body = 'Hello World';
如果一个服务器里面使用了多个中间件,要想下一个中间正常执行,就要在上一个中件
件里面添加一个next(),表示执行下一个中间件。如果没有添加next(),后面的中间件不会
执行。
ctx.request 和 ctx.req 的区别?
- ctx.request 是 Koa 帮我们封装好的。
- ctx.req 是原始的请求头。 ---> http.createServer( function(req,res){ } );
ctx.response 和 ctx.res 的区别?
- ctx.response 是 Koa 帮我们封装好的。
- ctx.res 是原始的响应头。 ---> http.createServer( function(req,res){ } );
响应头可以响应什么类型的数据
- 对象类型 ---> 会自动转化为 json 格式
- 对象数组 ---> 会自动转化为 json 格式
- buffer ---> 会自动转化为纯文本的格式,如果要将它转化为HTML的格式
添加如下的一行代码,将格式自动转化为html格式的:
ctx.set('Content-Type','text/html,chartset:utf-8');
Koa 还有一些缺陷
- 无论我们访问哪一个IP地址,返回给我们的都是同一个内容,这是因为
Koa 本身是没有办法发送 get 和 post 请求的,这个时候就需要就需要借助第三方的包。
- koa-router 可以提供 app.get、app.post、app.put 等操作。
- npm install koa-router / yarn add koa-router
- 导包跟引用
const Router = require('router');
const router = new Router();
router.get('/' , async (ctx,next) => {
} );
app.use(router.routers()).use(router.allowedMethods());