说明:koa默认为@1 版本
1。介绍
Koa是一个类似于Express的Web开发框架,创始人也是同一个人。它的主要特点是,使用了ES6的Generator函数,进行了架构的重新设计。也就是说,Koa的原理和内部结构很像Express,但是语法和内部结构进行了升级。
2. 与express 的区别
koa与express 引用中间件的方式很类似,都是app.use(func) 但是,koa中的func 参数必须是一个Generator 函数,也就是说koa用的是es6语法中的Generator函数进行的流程化管理。这就需要我们必须熟悉es6语法,具体参考阮一封老师的《es6入门》,
那么也就是说,以前express都是顺序执行的,而koa中多个use中间件就不一定是按照视觉上的顺时针执行了。
3.模拟推送消息实施更新 案例分析
node端还没有做数据,具体实现思路是添加数据到db后,更新redis,然后推送一条信息,这里暂时用轮训推送到客户端
客户端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
#rect{
width: 100px;
height: 60px;
padding-left: 10px;
line-height: 60px;
background: #3498db;
color: #FFFFFF;
transition: width 0.5s;
}
</style>
</head>
<body>
<div id="rect">
100
</div>
</body>
<!-- 我这里是用了gulp引用的 socket.io-client 包 -->
<script type="text/javascript" src="/js/bundle.js"></script>
</html>
js代码
var io = require('socket.io-client');
var socket = io('http://127.0.0.1');
socket.on('news', function (data) {
console.log(100+data.num);
document.getElementById('rect').innerHTML=100+data.num;
document.getElementById('rect').style.width=100+data.num+"px";
socket.emit('my other event', { my: 'data' });
});
console.log(document.getElementById('rect').style.width);
document.getElementById('rect').style.width=200+"px";
node端
/** Created by lilei on 2016/6/21.*/ var app = require('koa')() , koa = require('koa-router')() , logger = require('koa-logger') , json = require('koa-json') , views = require('koa-views'); // global middlewares app.use(require('koa-static')(__dirname + '/public')); app.use(views(__dirname+"/src/view")); koa.get('/',function* (next){ yield this.render('index.html'); }); koa.get('/user',function* (next){ this.body= "我是用户页面" }); app.use(koa.routes()); var server = require('http').Server(app.callback()), io = require('socket.io')(server); io.on('connection', function (socket) { setInterval(function () { socket.emit('news', { num: parseInt(Math.random()*100) }); },1000); socket.on('my other event', function (data) { console.log(data); }); }); app.on('error', function (err, ctx) { logger.error('server error', err, ctx); }); server.listen(80);
4.坑
1.koa-views 视图引擎,官网分koa2版本的和x.1分支的koa1版本的,但是x.1分之的文档默认安装的还是5.0以上的 还是koa2版本的,本以为@next版本才是koa2版本,导致一直薄报错,推荐查看koa-views 4.0之前的版本test代码来参考
2.node服务必须 var server = require('http').Server(app.callback()) 这么传入koa的callback 函数的方式启动,且必须放在koa.use 中间件下面
5. pm2 部署
注意有时没能杀死的进程占用端口,导致pm2启动后一直restart,cmd命令窗口不停弹弹弹。。。,解决: 找到端口占用的进程手动杀死