zoukankan      html  css  js  c++  java
  • 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(二)

    这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵呵

    前篇

    使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(一)

    这篇主要讲一下waterline的初始化,原文用的是mongoose

    原文第十二步

    一下子就到十二步了,因为原文件中react部分的代码本来就是用ES6写的,没什么好改的,唯一遇到的坑还是拼写

    import NavbarActions from '../actions/NavbarActions'';
    

    抄成

    import NavbarActions from '../Actions/NavbarActions';
    

    眼睛不尖的小伙伴这两句的代码差别可以也要找好久,我整整一天没有找出来,

    socket.on('onlineUsers', (data) => {
            NavbarActions.updateOnlineUsers(data);
          });
    

    按道理应该会触发
    NavbarStore中的 onUpdateOlineUsers 这个事件的,可是就因为我把actions敲成了Actions,页面执行没有任何错误提示,但是就是不执行onUpdateOlineUsers这个事件,通过chrome调试发现,我调用的是updateOnlineUsers1,这个玩意儿怎么来的,我把原文中的代码复制过来,运行就正常,用自己的怎么能不行,后来我把原文的代码另存一个文件通过diff两个文件的不同才发现这个错误的,还好在第二行,diff 很快发现了。

    吐完槽,还是开始第十二部分的改动吧,这是开始涉及到数据库了,原文用mongodb,我用mysql,改动就比较大了。
    原文中的models是这样的

    var mongoose = require('mongoose');
    
    var characterSchema = new mongoose.Schema({
      characterId: { type: String, unique: true, index: true },
      name: String,
      race: String,
      gender: String,
      bloodline: String,
      wins: { type: Number, default: 0 },
      losses: { type: Number, default: 0 },
      reports: { type: Number, default: 0 },
      random: { type: [Number], index: '2d' },
      voted: { type: Boolean, default: false }
    });
    
    module.exports = mongoose.model('Character', characterSchema);
    

    改用waterline并用es6规范后

    import Waterline from 'waterline';
    
    export default Waterline.Collection.extend({
      identity: 'character',
      connection: 'myLocalMysql',
      schema: true,
      attributes: {
        characterId: {type:'string',primaryKey: true, unique: true,index: true},
        name: 'string',
        race: 'string',
        gender: 'string',
        bloodline: 'string',
        wins: {type: 'integer', defaultsTo: 0 },
        losses: {type: 'integer', defaultsTo: 0 },
        reports: {type: 'integer', defaultsTo: 0 },
        voted: {type: 'boolean', defaultsTo: false}
      }
    });
    

    注意:我这里去掉了random这个字段,原文中这个random字段就是用来随机获取数据库中的数据的,但同样的方法无法在mysql中用,所以我就去掉了,实现方法后文里会讲

    waterline 的一些基础用法可以参见我的《使用 Express 和 waterline 创建简单 Restful API》这篇小文,或自行查看官方文档

    在根目录下创建 config.js 针对waterline的配置文件,以便连接mysql

    import mysqlAdapter from 'sails-mysql';
    
    const wlconfig = {
      adapters: {
        'default':mysqlAdapter,
        mysql: mysqlAdapter
      },
    
      connections: {
        myLocalMysql: {
          adapter : 'mysql',
          host : 'localhost',
          port : 3306,
          user : 'root',
          password : '',
          database : 'test'
        }
      },
    
      defaults: {
        migrate: 'safe'
      }
    };
    
    export default wlconfig;
    

    然后回到server.js中启用

    ...
    //首先在头部引入相关库和配置文件
    import Waterline from 'waterline';
    ...
    
    import Config from './config';
    ....
    
    let app = express();
    //原来上面这一句后面加上这两行
    let orm = new Waterline();
    orm.loadCollection(Character);
    
    
    //在最后面把
    /**
      *原来的启动代码
      *
      *server.listen(app.get('port'),() => {
      *    console.log('Express server listening on port ' + app.get('port'));
      *  });
      */
    //改成
    
    orm.initialize(Config, (err,models) => {
      if(err) throw err;
      app.models = models.collections;
      //app.set('models',models.collections);
      app.connections = models.connections;
    
      server.listen(app.get('port'),() => {
        console.log('Express server listening on port ' + app.get('port'));
      });
    });
    
    

    注意:config.js中的 migrate 属性 一开始的时候可以把它设为 'alter' 这样可以省了你自己创建数据库的过程,但写入数据以后一定要改为'safe' 不然重启服务会清空清数据的。

    后篇

    使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)

  • 相关阅读:
    海量数据处理方法
    转:海量数据找中位数
    c显示数字的LED(数字转LED)
    转:30分钟掌握STL
    jQuery 顶部导航尾随滚动,固定浮动在顶部
    使用Visual Studio 创建新的Web Part项目
    java日期工具类
    林志玲为何无法拯救都市丽人的遇冷?
    【LeetCode】Swap Nodes in Pairs
    mysql 数据库备份ubuntu
  • 原文地址:https://www.cnblogs.com/9527/p/6144637.html
Copyright © 2011-2022 走看看