koa学习
一、koa简介
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
注:
Koa 依赖 node v7.6.0 或 ES2015及更高版本和 async 方法支持.
即便没有给ctx.body 设置响应数据,或访问不存在的路由,页面也会显示Not Found,这是koa底层做了处理,不像原生Node或Express一样页面会一直处于响应状态。
二、koa入门程序
1、首先在项目中安装koa
2、 新建一个Js文件
3、node运行js文件
浏览器访问 http://localhost:3000/
结果为

koa有中间件机制 中间件机制是个洋葱环
第一个中间件执行完,next() 之后会执行第二个中间件,当执行到最后一个的时候,会一层层返回
执行到最后一个中间件,在从里往外一层层的返回执行
三、路由
Koa中的路由和Express不同,Express是把路由集成在Express中,Koa则需要通过kao-router模块使用。
安装:
使用
四、contenxt
Koa将Node的request 和 response对象都封装到了context中,每次请求都会创建一个ctx,并且在中间件中作为接收器使用。
以下是刚才访问时的ctx对象
剖析ctx
1、区分request、response、req、res
注意:
绕过Koa的response是不被处理的,避免使用Node的属性和方法,比如:
即便使用ctx.res.write()也不会得到预期结果,比如:ctx.res.write('hello'),结果是hellook,会把message的值拼接上。
2、ctx.state
推荐的命名空间,用于通过中间件传递信息到你的前端视图。比如每个页面都要用到用户信息,那就可以挂载在ctx.state。类似于添加全局属性。
3、ctx.app
应用程序实例引用
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
注:
Koa 依赖 node v7.6.0 或 ES2015及更高版本和 async 方法支持.
即便没有给ctx.body 设置响应数据,或访问不存在的路由,页面也会显示Not Found,这是koa底层做了处理,不像原生Node或Express一样页面会一直处于响应状态。
二、koa入门程序
1、首先在项目中安装koa
npm install koa --save2、 新建一个Js文件
const koa = require('koa');
const app = new koa();
app.use(async(ctx,next)=>{
ctx.body='1';
next();
ctx.body +='2';
});
app.use(async(ctx,next)=>{
ctx.body+='3';
next();
ctx.body+='4';
});
app.use(async(ctx,next)=>{
ctx.body+='5';
next();
ctx.body+='6'
});
//ctx是上下文,next是执行下一个中间件
app.listen(3000);3、node运行js文件
浏览器访问 http://localhost:3000/
结果为

koa有中间件机制 中间件机制是个洋葱环
第一个中间件执行完,next() 之后会执行第二个中间件,当执行到最后一个的时候,会一层层返回
执行到最后一个中间件,在从里往外一层层的返回执行
三、路由
Koa中的路由和Express不同,Express是把路由集成在Express中,Koa则需要通过kao-router模块使用。
安装:
npm i koa-router使用
const Koa = require('koa');
// 直接调用的方式
const router = require('koa-router')();
// 或 单独创建router的实例
const Router = require('koa-router');
const router = new Router();
router.get('/', async ctx => {
ctx.body = 'Hello Router';
})
// 启动路由
app.use(router.routes()).use(router.allowedMethods())
// 以上为官方推荐方式,allowedMethods用在routes之后,作用是根据ctx.status设置response header.
app.listen(3000, err => {
if (err) throw err;
console.log('runing...');
});
四、contenxt
Koa将Node的request 和 response对象都封装到了context中,每次请求都会创建一个ctx,并且在中间件中作为接收器使用。
以下是刚才访问时的ctx对象
let ctx = {
// 请求
request: {
method: 'GET',
url: '/',
// request header
header: {
host: '127.0.0.1:3030',
connection: 'keep-alive',
'cache-control': 'max-age=0',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
cookie: 'connect.sid=s%3AnQtQApNcQ55RmpjnkmQvWNTrdjYhZnlh.1FQUbVqpwpdRj8N6wjv8nOarf8hyzIpcxXN2LPYXGy0'
}
},
// 响应
response: {
status: 200,
message: 'ok',
header: {
'content-type': 'text/plain; charset=utf-8',
'content-length': '9'
}
},
app: {
subdomainOffset: 2,
proxy: false,
env: 'development'
},
originalUrl: '/',
// 原生Node的request对象
req: '<original node req>',
// 原生Node的reponse对象
res: '<original node res>',
socket: '<original node socket>'
}
剖析ctx
1、区分request、response、req、res
requset ctx的请求对象
response ctx的响应对象
req Node的请求对象
res Node的响应对象注意:
绕过Koa的response是不被处理的,避免使用Node的属性和方法,比如:
res.statusCode
res.writeHead()
res.write()
res.end()即便使用ctx.res.write()也不会得到预期结果,比如:ctx.res.write('hello'),结果是hellook,会把message的值拼接上。
2、ctx.state
推荐的命名空间,用于通过中间件传递信息到你的前端视图。比如每个页面都要用到用户信息,那就可以挂载在ctx.state。类似于添加全局属性。
ctx.state.userInfo = {
name: 'Jack',
age: 18
}
3、ctx.app
应用程序实例引用
...全文
相关推荐
koa-api:一个关于koa、mysql学习的restapi
本项目"koa-api"是一个基于 Koa 框架和 MySQL 数据库的学习资源,用于构建 RESTful API,这将帮助开发者更好地理解和实践 API 开发。首先,我们来深入了解 Koa。
【koa】01-专栏介绍及学习计划
前面的文章介绍了express框架,并且做了一个专栏。了解到node的koa框架也是很常用,在接下来会介绍相关知识,编写相关代码案例,写成博客文章,整理成一个专栏,并且我会整理代码放在仓库中,和大家一起学习交流。
koa2-learning:koa2 + mysql学习项目
koa2 + mysql学习项目"进一步强调了项目不仅涉及Koa2,还包括与MySQL的集成,意味着学习者将学习如何在Koa2应用中设置和操作数据库。"
koa:学习koa过程
通过深入学习和实践,你将能够利用Koa构建出高性能、易维护的应用程序。
Koa:Koa的相关学习
笔记(官網)[https://koajs.com/]這個目錄基本上就是學習用的集合,而真正實際會展開來的應用,則再另行從頭安裝,讓內容可以相對乾淨點起手式安装koa npm i koa koa-rou


