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. JDK源代码学习-ArrayList、LinkedList、HashMap

    ArrayList.LinkedList.HashMap是Java开发中非常常见的数据类型.它们的区别也非常明显的,在Java中也非常具有代表性.在Java中,常见的数据结构是:数组.链表,其他数据结 ...

  2. vue1.0+vue2.0实现选项卡

    通常我们写tab选项卡的时候,一般都是用jq等去操作dom,给同级元素移除active类,然后,给被点击元素添加active类,用vue实现也是同样的原理,都是操作active类. 我们都知道用vue ...

  3. Educational Codeforces Round 60 (Rated for Div. 2)

    A. Best Subsegment 题意 找 连续区间的平均值  满足最大情况下的最长长度 思路:就是看有几个连续的最大值 #include<bits/stdc++.h> using n ...

  4. <数据结构基础学习>(四)链表 Part 2

    一.使用链表实现栈 增,删,查只对链表头进行操作,时间复杂度都为O(1) 链表头作为栈顶 LinkedListStack<E> implements Stack<E> publ ...

  5. 添加sudo免密码

    visudo 添加如下内容即可: lizhaojun ALL=(ALL) NOPASSWD: ALL

  6. 使用idea搭建maven项目

    前言---2018-11-24 博主最近呀,也是一直在看书,但是呢有许多小伙伴和博主反应,在eclipse都会搭建maven项目,但是呢到了idea就不会了,于是了博主就起了个早床写一遍博客咯.希望对 ...

  7. RocketMQ_问题_启动控制台console报错,connect to <null> failed

    配置如图所示: 问题如图所示: 明明配置了nameserver参数为啥还是connect to null呢? 我的rocketmq部署在CentOS7虚拟机上,原来是没关闭防火墙,执行:systemc ...

  8. Client-Side Template Injection with AngularJS

    <html> <head> <meta charset="utf-8"> <script src="https://cdn.bo ...

  9. 查看和设置MySQL数据库字符集(转)

    查看和设置MySQL数据库字符集作者:scorpio 2008-01-21 10:05:17 标签: 杂谈 Liunx下修改MySQL字符集:1.查找MySQL的cnf文件的位置find / -ina ...

  10. 计算机视觉学习记录 - Implementing a Neural Network from Scratch - An Introduction

    0 - 学习目标 我们将实现一个简单的3层神经网络,我们不会仔细推到所需要的数学公式,但我们会给出我们这样做的直观解释.注意,此次代码并不能达到非常好的效果,可以自己进一步调整或者完成课后练习来进行改 ...