koa
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的更多相关文章
- Node.js实现RESTful api,express or koa?
文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...
- koa简介
资料来源:http://javascript.ruanyifeng.com/nodejs/koa.htmlhttp://koa.bootcss.com/ 以下内容为摘抄,纯属做笔记加深印象.勿喷. 使 ...
- koa框架异步返回值的操作(co,koa-compose)
最近在做demo的时候使用了koa框架,自己做了一个静态服务器,首先判断访问文件是否存在,在回调函数中设置了this.body,run之后,各种404,花了N长的时间把koa-compose和co模块 ...
- koa知识点
1. Koa 不支持 直接调用底层 res 进行响应处理.请避免使用以下 node 属性: res.statusCode res.writeHead() res.write() res.end() 2 ...
- Koa框架实践与中间件原理剖析
最近尝试用了一下Koa,并在此记录一下使用心得. 注意:本文是以读者已经了解Generator和Promise为前提在写的,因为单单Generator和Promise都能够写一篇博文来讲解介绍了,所 ...
- [Node.js] ECMAScript 6中的生成器及koa小析
原文地址:http://www.moye.me/2014/11/10/ecmascript-6-generator/ 引子 老听人说 koa大法好,这两天我也赶了把时髦:用 n 安上了node 0.1 ...
- Koa – 更加强大的下一代 Node.js Web 框架
Koa 是 Express 的开发团队设计的下一代 Web 框架,其目的是为 Web 应用程序提供更小,更具表现力,更坚实的基础.Koa 没有核捆绑任何中间件,并提供了一套优雅的方法,使服务器端开 ...
- koa 笔记 运行错误
按照 演示的代码 直接运行会出错,大家需要调整方式. http://koajs.cn/ 要安装以下 $ npm install -g n$ n 0.11.12$ node --harmony my-k ...
- koa redis 链接
koa 是新一代框架 npm install koa-redis 代码如下 var koa = require('koa'); var http = require('http'); var sess ...
- 深入探析koa之异步回调处理篇
在上一篇中我们梳理了koa当中中间件的洋葱模型执行原理,并实现了一个可以让洋葱模型自动跑起来的流程管理函数.这一篇,我们再来研究一下koa当中异步回调同步化写法的原理,同样的,我们也会实现一个管理函数 ...
随机推荐
- JDK源代码学习-ArrayList、LinkedList、HashMap
ArrayList.LinkedList.HashMap是Java开发中非常常见的数据类型.它们的区别也非常明显的,在Java中也非常具有代表性.在Java中,常见的数据结构是:数组.链表,其他数据结 ...
- vue1.0+vue2.0实现选项卡
通常我们写tab选项卡的时候,一般都是用jq等去操作dom,给同级元素移除active类,然后,给被点击元素添加active类,用vue实现也是同样的原理,都是操作active类. 我们都知道用vue ...
- Educational Codeforces Round 60 (Rated for Div. 2)
A. Best Subsegment 题意 找 连续区间的平均值 满足最大情况下的最长长度 思路:就是看有几个连续的最大值 #include<bits/stdc++.h> using n ...
- <数据结构基础学习>(四)链表 Part 2
一.使用链表实现栈 增,删,查只对链表头进行操作,时间复杂度都为O(1) 链表头作为栈顶 LinkedListStack<E> implements Stack<E> publ ...
- 添加sudo免密码
visudo 添加如下内容即可: lizhaojun ALL=(ALL) NOPASSWD: ALL
- 使用idea搭建maven项目
前言---2018-11-24 博主最近呀,也是一直在看书,但是呢有许多小伙伴和博主反应,在eclipse都会搭建maven项目,但是呢到了idea就不会了,于是了博主就起了个早床写一遍博客咯.希望对 ...
- RocketMQ_问题_启动控制台console报错,connect to <null> failed
配置如图所示: 问题如图所示: 明明配置了nameserver参数为啥还是connect to null呢? 我的rocketmq部署在CentOS7虚拟机上,原来是没关闭防火墙,执行:systemc ...
- Client-Side Template Injection with AngularJS
<html> <head> <meta charset="utf-8"> <script src="https://cdn.bo ...
- 查看和设置MySQL数据库字符集(转)
查看和设置MySQL数据库字符集作者:scorpio 2008-01-21 10:05:17 标签: 杂谈 Liunx下修改MySQL字符集:1.查找MySQL的cnf文件的位置find / -ina ...
- 计算机视觉学习记录 - Implementing a Neural Network from Scratch - An Introduction
0 - 学习目标 我们将实现一个简单的3层神经网络,我们不会仔细推到所需要的数学公式,但我们会给出我们这样做的直观解释.注意,此次代码并不能达到非常好的效果,可以自己进一步调整或者完成课后练习来进行改 ...