koa

链接:

官网: https://koa.bootcss.com/#
入门: http://www.ruanyifeng.com/blog/2017/08/koa.html
进阶: https://chenshenhai.github.io/koa2-note/
跨域: https://github.com/zadzbw/koa2-cors
koa 需要 node v7.6.0以上
npm i koa
koa 2.5.0
入门
const Koa = require('koa');
const app = new Koa(); const main = ctx => {
ctx.response.body = 'Hello World';
}; app.use(main);
app.listen(3000);
koa-generator  生成 koa项目
npm i koa-generator -g
koa2 test
cd test && npm i

koa2 获取后端接口,提供给前端使用

router.get('/string', async (ctx, next) => {
let a = await axios.get('http://localhost:1111/comments') // 获取后端接口
console.log('a',a);
let obj = {
'name': 'kang',
'age': 24
}
ctx.body = a.data // 提供给前端访问 http://xxx:3000/string
})

跨域

const cors = require('koa2-cors')   // 提供接口给前端,解决跨域
app.use(cors()) // 跨域

其他

【引入模板文件】
const fs = require('fs');
ctx.response.body = fs.createReadStream('./template.html'); 【原生路由: url请求判断 】
if (ctx.request.path !== '/') {
ctx.response.type = 'html';
ctx.response.body = '<a href="/">Index Page</a>';
} 【koa-route 路由】
const Koa = require('koa');
const route = require('koa-route');
const app = new Koa(); const about = ctx => {
ctx.response.type = 'html';
ctx.response.body = '<a href="/">Index Page</a>';
}; const main = ctx => {
ctx.response.body = 'Hello World';
}; app.use(route.get('/', main));
app.use(route.get('/about', about)); app.listen(3000); const serve = require('koa-static'); // 静态资源
ctx.response.redirect() // 重定向 【logger 日志中间件 】
const logger = (ctx, next) => {
console.log(`${Date.now()} ${ctx.request.url}`);
next(); // 有next() 才会继续往下执行
} const main = ctx => {
ctx.response.body = 'Hello World';
}; app.use(logger);
app.use(main); // 有next()这里才会执行
app.listen(3000); 多个中间件会形成一个栈结构(middle stack),以"先进后出"(first-in-last-out)的顺序执行 // 异步中间件 必须 async 和 await
const fs = require('fs.promised'); const main = async function (ctx, next) {
ctx.response.type = 'html';
ctx.response.body = await fs.readFile('./template.html', 'utf8'); 【读文件】
}; const compose = require('koa-compose'); 【中间件合并】
compose([logger,main]) ctx.throw(500) 抛错
ctx.response.status = 404; // 通过改status 来抛错

koa2

koa2

const Koa = require('koa')
const app = new Koa()
const bodyparser = require('koa-bodyparser') // bodyparser 不知道效果
const logger = require('koa-logger') // logger 不知道效果
const cors = require('koa2-cors') // cors
const bouncer =require('koa-bouncer') // koa-bouncer 扩展router 里面的 ctx 方法 详见 npm bodyparser() 获取 post传递的表单数据、json数据,上传文件等,使用 this.body() 获取 app.use(bodyparser({
enableTypes:['json', 'form', 'text']
}))
可不配置:
app
.use(cors())
.use(bodyparser())
.use(logger())
.use(bouncer.middleware()) // extends the Koa context with some methods
.use(require('koa-static')(__dirname + '/public')) // 静态资源
koa-logger 替换console.log输出的一个插件。

koa的更多相关文章

  1. Node.js实现RESTful api,express or koa?

    文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...

  2. koa简介

    资料来源:http://javascript.ruanyifeng.com/nodejs/koa.htmlhttp://koa.bootcss.com/ 以下内容为摘抄,纯属做笔记加深印象.勿喷. 使 ...

  3. koa框架异步返回值的操作(co,koa-compose)

    最近在做demo的时候使用了koa框架,自己做了一个静态服务器,首先判断访问文件是否存在,在回调函数中设置了this.body,run之后,各种404,花了N长的时间把koa-compose和co模块 ...

  4. koa知识点

    1. Koa 不支持 直接调用底层 res 进行响应处理.请避免使用以下 node 属性: res.statusCode res.writeHead() res.write() res.end() 2 ...

  5. Koa框架实践与中间件原理剖析

     最近尝试用了一下Koa,并在此记录一下使用心得. 注意:本文是以读者已经了解Generator和Promise为前提在写的,因为单单Generator和Promise都能够写一篇博文来讲解介绍了,所 ...

  6. [Node.js] ECMAScript 6中的生成器及koa小析

    原文地址:http://www.moye.me/2014/11/10/ecmascript-6-generator/ 引子 老听人说 koa大法好,这两天我也赶了把时髦:用 n 安上了node 0.1 ...

  7. Koa – 更加强大的下一代 Node.js Web 框架

    Koa 是 Express 的开发团队设计的下一代 Web 框架,其目的是为 Web 应用程序提供更小,更具表现力,更坚实的基础.Koa 没有核捆绑任何中间件,并提供了一​​套优雅的方法,使服务器端开 ...

  8. koa 笔记 运行错误

    按照 演示的代码 直接运行会出错,大家需要调整方式. http://koajs.cn/ 要安装以下 $ npm install -g n$ n 0.11.12$ node --harmony my-k ...

  9. koa redis 链接

    koa 是新一代框架 npm install koa-redis 代码如下 var koa = require('koa'); var http = require('http'); var sess ...

  10. 深入探析koa之异步回调处理篇

    在上一篇中我们梳理了koa当中中间件的洋葱模型执行原理,并实现了一个可以让洋葱模型自动跑起来的流程管理函数.这一篇,我们再来研究一下koa当中异步回调同步化写法的原理,同样的,我们也会实现一个管理函数 ...

随机推荐

  1. python如何安装pip及venv管理

    问题1:如何安装pip python的虚拟环境virtualenv的管理 背景: (1)python的版本很多,每个应用项目可能需要使用不同的版本,这样会导致兼容性问题: python的插件相当的丰富 ...

  2. git仓库构建小记

    1.新建 .git 文件夹 约定的文件目录下,新建 .git 文件夹 mkdir test.git 2.初始化服务端仓库 git init --bare test.git 此时进入 test.git ...

  3. Codeforces Global Round 2

    A:答案一定包含首位或末位. #include<iostream> #include<cstdio> #include<cmath> #include<cst ...

  4. P2822 组合数问题 HMR大佬讲解

    今天HMR大佬给我们讲解了这一道难题. 基本思路是: 可以将问题转化为:求出杨辉三角,用二维数组f[i][j]来表示在杨辉三角中以第i行第j列的点为右下角,第0行第0列处的点为左上角的矩阵中所有元素是 ...

  5. 【并发编程】【JDK源码】J.U.C--AQS (AbstractQueuedSynchronizer)(1/2)

    J.U.C实现基础 AQS.非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),concurrent包中的基础类都是使用这种模式来实现的.而concurren ...

  6. Linux(1)-卸载挂载分区

    > df -lh > fuser -m -v /dev/mapper/autovg-autolv > fuser -m -k -v /dev/mapper/autovg-autolv ...

  7. <五>企业级开源仓库nexus3实战应用–使用nexus3配置npm私有仓库

    一两个星期之前,你如果在我跟前说起私服的事情,我大概会绕着你走,因为我对这个东西真的一窍不通.事实上也正如此,开发同学曾不止一次的跟我说公司的私服版本太旧了,许多新的依赖编译之后不会从远程仓库自动缓存 ...

  8. Pandas系列(九)-分组聚合详解

    目录 1. 将对象分割成组 1.1 关闭排序 1.2 选择列 1.3 遍历分组 1.4 选择一个组 2. 聚合 2.1 一次应用多个聚合操作 2.2 对DataFrame列应用不同的聚合操作 3. t ...

  9. python 线程/线程锁/信号量

    单线程 #常规写法 import threading import time def sayhi(num): # 定义每个线程要运行的函数 print("running on number: ...

  10. SpringCloud笔记四:Ribbon

    目录 什么是Ribbon? Ribbon的配置 Maven引入 开启注解 Ribbon负载均衡 新建provider8002和8003 Ribbon核心组件IRule Ribbon自定义 什么是Rib ...