koa框架(一) 认识koa
koa
- koa是
express
原班人马打造的轻量、健壮、富有表现力的nodejs框架。目前koa有koa1和koa2两个版本;koa2依赖Node.js 7.6.0或者更高版本;koa不在内核方法中绑定任何中间件,它仅仅是一个轻量级的函数库,几乎所有功能都必须通过第三方插件来实现。
koa 的使用
基本服务
- koa安装
npm i koa
- 一个简单的koa服务器
const Koa = require('koa'); const app = new Koa();app.use(async ctx => {ctx.body = 'Hello World'; }); app.listen(3000);
- koa 利用中间件 控制“上游”,调用”下游“;
koa是包含一组中间件函数的对象;可以将app.use里的函数理解成中间件
//这里的middleWare函数就是一个中间件 let middleWare = async (ctx,next)=>{console.log("first middleWare");ctx.body = "hello world"; } app.use(middleWare);
通过next()将控制转交给另一个中间件;
上述过程也可以通过"洋葱模型“来解释中间件执行顺序
Application对象
application
是koa的实例,简写appapp.use
将给定的中间件方法添加到此应用程序,分为同步和异步,异步:通过es7中的async和await来处理- app.listen设置服务器端口;
- app.on 错误处理;
上下文context对象常用属性及方法
context
将node中的request
和response
封装到一个对象中,并提供一些新的api提供给用户进行操作;ctx.app
:应用程序实例引用,等同于app;ctx.req
: Node 的request
对象.ctx.res:
Node的
response` 对象.ctx.request
: koa中的Request
对象;ctx.response
: koa中的response
对象;ctx.state
:对象命名空间,通过中间件传递信息;ctx.throw
: 抛出错误;
request
及response
别名koa会把ctx.requset上的属性直接挂载到ctx上如:
ctx.header
ctx.headers
ctx.method
ctx.method=
ctx.url
ctx.url=
……
同样也会把ctx.response上的属性直接挂载到ctx上如:
ctx.body
ctx.body=
ctx.status
ctx.status=
….
ctx.status 获取响应状态。默认情况下,
response.status
设置为404
而不是像 node 的res.statusCode
那样默认为200
。
koa常用中间件介绍
koa-router
- 路由是引导匹配之意,是匹配url到相应处理程序的活动。
- koa-router推荐使用RESTful架构API。Restful的全称是Representational State Transfer 即表现层转移。
- RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。基于这个风格设计可以更简洁,更有层次;
- RESTful设计一般符合如下条件:
- 程序或者应用的事物都应该被抽象为资源
- 每个资源对应唯一的URI(uri是统一资源标识符)
- 使用统一接口对资源进行操作
- 对资源的各种操作不会改变资源标识
- 所有操作都是无状态的
- koa-router安装
npm i koa-router -S
- 基本使用
const KoaRouter = require('koa-router');
const router = new KoaRouter();
router.get('/login', ctx => {ctx.body = '登陆';
})
app.use(router.routes());
koa-views
- Koa-views用于加载html模板文件;
- 安装 koa-views
npm i koa-views -S
- 使用koa-view
koa-static
- koa-static是用于加载静态资源的中间件,通过它可以加载css、js等静态资源;
- 安装 koa-static
npm i koa-static
- 使用koa-static
const static = require("koa-static");//加载静态文件的目录app.use(static(__dirname+"/static"),{index:false, // 默认为true 访问的文件为index.html 可以修改为别的文件名或者falsehidden:false, // 是否同意传输隐藏文件defer:true, // 如果为true,则在返回next()之后进行服务,从而允许后续中间件先进行响应})
koa-static-cache
- 作用同
koa-static
,但是可以配置缓存策略 - 安装 koa-static-cache
npm i koa-static-cache
- 使用koa-static-cache
const KoaStaticCache = require('koa-static-cache');
app.use(KoaStaticCache('./static', {prefix: '/public', // URL前缀,默认是 '.'maxAge: 0, // 缓存时间,单位毫秒,默认为0gzip: true, // 启用gzip压缩传输,默认为truedynamic: true
}));
koa-body
- 安装 koa-body
npm i koa-body
- 使用koa-body
const koaBody = require('koa-body');
app.use(koaBody({multipart: true,// 处理上传的二进制文件formidable: {// 上传目录uploadDir: __dirname + '/public/upload',// 是否保留上传文件名后缀keepExtensions: true,onFileBegin(name, file) {// console.log('name, file', name, file);return false;}}
}));
demo
- app.js
const Koa = require('koa');
const KoaRouter = require('koa-router');
const KoaStaticCache = require('koa-static-cache');
// 创建 server 对象
const server = new Koa();
// 创建静态文件代理服务
server.use( KoaStaticCache('./public', {prefix: '/public',gzip: true,dynamic: true
}) );
// 除了上面以 /public 开头的url,其它都会走下面router进行处理
// 创建动态资源(使用router来为动态资源做映射)
// 创建一个router对象
const router = new KoaRouter();
// 用 router 来注册各种需要用到的url资源处理函数
router.get('/', ctx => {ctx.body = 'Hello';
});
router.get('/getData', ctx => {// 不是合法的json格式// ctx.body = "{'name': 'koa'}";// 必须是双引号// ctx.set('Content-Type', 'application/json;charset=utf-8');// ctx.body = '{"name": "koa"}';// koa 框架内部帮助我们做了一些处理,如果你给body设置一个对象,那么koa内部会把这个对象转成json以后再发送,同时设置头信息application/json;charset=utf-8ctx.body = {name: 'koa'};// ctx.type = 'application/json;charset=utf-8';// 等同下面的代码// ctx.set('Content-Type', 'application/json;charset=utf-8');
});
router.post('/attachment', upload('/static/attachment'), async ctx => {console.log(ctx.files);ctx.body = '上传成功';
});
// 把router对象的routes中间件注册到Koa中
server.use(router.routes());
// 启动服务,并监听指定的端口
server.listen(8081, () => {console.log('服务启动成功,http://localhost:8081');
});function upload(dir) {return koaBody({// 开启二进制content-type类型的处理multipart: true,formidable: {uploadDir: __dirname + dir,keepExtensions: true,onFileBegin(name, file) {// console.log('name, file', name, file);return false;}}});
}
koa框架(一) 认识koa相关推荐
- Koa框架教程,Koa框架开发指南,Koa框架中文使用手册,Koa框架中文文档
我的博客:CODE大全:www.codedq.net:业余草:www.xttblog.com:爱分享:www.ndislwf.com或ifxvn.com. Koa -- 基于 Node.js 平台的下 ...
- vue如何配置服务器端跨域_客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解...
本篇博客主要说明: 前后端框架(本例中是vue和koa)如何发送请求?获取响应? 以及跨域问题如何解决? vue部分: import App from './App.vue' import Axios ...
- 知新 | koa框架入门到熟练第一章
介绍 koa,是基于Node.js 平台的下一代的web开发框架. 是由Express原班人马打造,致力于成为一个更小的,更加富有表现力的,web框架. 使用koa编写web应用,可以免除重复的回调函 ...
- 【nodeJS】从nodejs原生的博客网站搭建到 koa框架实现个人博客网站搭建
nodejs实现搭建博客网站 前言:原java后端渣渣一枚,因项目需要转学了nodejs进行开发,正式进行项目开发之前,师傅安排了一些项目训练,先熟悉js语法,然后熟悉nodejs,再慢慢重构向框架的 ...
- nodejs Koa框架及常用中间件
目录 前言:了解nodejs 1.nodejs简介 2.nodejs安装 3.检验是否安装成功 4.npm介绍以及使用 ①.koa基础 1.koa创建简单实例 2.koa中间件 ②.koa中常用的第三 ...
- 2019011工作日志-关于代币空投合约的编写和js基于koa框架的整合
1. 空投代币智能合约的编写 1.1测试代币的合约的编写 注:代币合约是基于openzeppelin-solidity库实现的,基于truffle框架,koa框架等 代币合约的版本是0.4.16 pr ...
- Node服务器 - koa框架
1 koa的基本使用 2 koa的参数解析 3 koa响应和错误 4 koa静态服务器 5 koa的源码解析 6 和express对比 koa的基本使用过程 const Koa = require(' ...
- koa灵魂拷问之koa源码--呕心沥血之作
前言 随着前端的生态逐渐变好,前端一定程度上也进入了内卷时代.从目前来看,node.js逐渐成为前端必会的技术栈之一,他可以让我们快速的搭建一个后端,从而让我们不再依赖后端. 而在node.js里面的 ...
- KOA框架编程13-层级路由的使用
背景 使用过exrepss框架的同学,是否还记得,我们当时对路由的引用是分层两个步骤的,先定义路由,再在app.js里头引用路由.这个过程koa其实也是这么过来的.但是不同的是,express里头,我 ...
最新文章
- java程序设计案例教程 钱银中_《Java程序设计案例教程》【价格 目录 书评 正版】_中国图书网...
- zephyr 测试框架
- PAT甲级1081 Rational Sum:[C++题解]分数求和、辗转相除法求最大公约数、long long有一个数据溢出
- 文巾解题 1765. 地图中的最高点
- wxWidgets:wxAppConsole类用法
- linux授权文件夹给用户_一项一项教你测等保2.0——Linux访问控制
- 黑客技术的网站(❤️可以自学,建议收藏❤️)
- jboss as7 下载_JBoss AS 7:定制登录模块
- python常用函数import_python 常用函数集合
- js几个页面生成pdf 然后批量打印_太好用了!这款免费PDF工具能够满足你的各种需求...
- 数据结构哈希表 转载
- AssertionError: Torch not compiled with CUDA enabled
- Spring Security小例子
- C语言-实现对单循环链表中奇数和偶数结点的移动(前面奇数结点后面偶数结点)
- 《Composing Programs》学习笔记(1.1)开始(关键词:软件工程/抽象/函数)
- 1392:繁忙的都市(city)
- MS SQL数据库备份和恢复
- mysql修改初始化得到的密码
- 计算机病毒相关试题,计算机病毒类考试题目以及参考答案
- thinkphp6下载汉字转拼音包以及其使用方法