Koa开发了解

1.简单架设http服务

使用koa开发服务,只需要少许代码,就可以假设一个简易服务器

// 引入模块
const koa=require('koa');
// 创建koa实例
const app=new koa();
// 服务器监听端口
app.listen(3000)

/*
	只需要三行代码,我们就可以构建一个简易的服务器.
	打开浏览器,访问 http://127.0.0.1:3000 。你会看到页面显示"Not Found",表示没有发现任何内容。当然,这个服务器目前来说是什么也做不了的.
*/
(1)Context对象

Koa中提供了一个对象Context,表示一次对话的上下文.通过加工这个对象,我们可以控制返回给用户的内容

Context对象包含了原始node的http请求和http回复(即request和response);

app.use(axync (context)=>{
   
	console.log(context)
})

context对象是我们操作控制请求与回复的关键对象,它其中包含了request对象和response对象.我们可以通过它去处理获取相应的url信息与返回客户端信息

一个简单的请求

// 引入核心模块
const koa=require('koa')

// 创建koa实例
const app=new koa()

// 使用中间件(路由)
app.use(async (context)=>{
   

	// 通过context.body返回信息给客户端
    context.body=context
})
// 监听端口号
app.listen(3000);
console.log('Server running at http://127.0.0.1:3000')

// 当我们运行程序后,访问 http://127.0.0.1:3000 后,我们将在页面上看到如下内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-onIb1cfL-1600687125350)(D:\Learn_notes\Koa\public\ctx.png)]

通过上面信息,我们可以看到,context对象中,context.response代表 HTTP Response。同样地,context.request代表 HTTP Request。

响应头类型

在koa中,通常默认返回的响应头类型是 “text/plain” 格式类型. 即 {“Content-Type”:“text/plain”}.若我们想根据客户希望接收的数据类型进行相应返回,则我们可以根据 context.request.accepts (类型) 方法判断请求头类型,然后再根据context.response.type方法设置相应的响应头信息

app.use (async  ctx => {
   
  if (ctx.request.accepts('xml')) {
   
    ctx.response.type = 'xml';
    ctx.response.body = '<data>Hello World</data>';
  } else if (ctx.request.accepts('json')) {
   
    ctx.response.type = 'json';
    ctx.response.body = {
    data: 'Hello World' };
  } else if (ctx.request.accepts('html')) {
   
    ctx.response.type = 'html';
    ctx.response.body = '<p>Hello World</p>';
  } else {
   
    ctx.response.type = 'text';
    ctx.response.body = 'Hello World';
  }
});

/*
	ctx:context
	ctx.response.body可简写为ctx.body
	ctx.response.type可简写为ctx.type
	ctx.request.accepts('类型')可简写为ctx.accepts('类型');
*/

级联特性

在koa中,除了context对象外,还存在方法next,该方法用于我们跳转使用下一个中间件.

ctx即context.

当一个中间件调用next()函数时,该中间件将暂停执行next()函数后面的内容,转而跳转执行下一个中间件.

当跳转的中间件内容执行完毕后,将返回上一个中间件继续执行next()函数后面的内容.若 跳转的下一级中间件种也存在next()函数,则执行顺序相同next()函数调用

// 引入相关模块koa
const koa = require("koa");

// 创建koa实例对象
const app = new koa();

// 中间件1
app.use(async (ctx, next) => {
   
  await next();
  console.log(1)
  const rt = ctx.response.get("X-Response-Time");
  console.log(`${
     ctx.method} ${
     ctx.url} - ${
     rt}`);
});

// 中间件2
app.use(async (ctx, next) => {
   
  const start = Date.now();
  await next();
  console.log(2)
  const ms = Date.now() - start;
  ctx.set("X-Response-Time", `${
     ms}ms`);
});

// 中间件3
app.use(async (ctx) => {
   
    console.log(3)
  ctx.body = "Hello World";
});

// 监听端口3000
app
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值