说明: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命令窗口不停弹弹弹。。。,解决: 找到端口占用的进程手动杀死