使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(二)
2016-12-08 13:38
1281 查看
这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵呵
前篇
这篇主要讲一下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中用,所以我就去掉了,实现方法后文里会讲
在根目录下创建 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开发一个角色投票应用的学习过程(三)相关文章推荐
- 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)
- 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(一)
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用socket.io和node.js搭建websocket应用
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用Node.js+Socket.IO搭建WebSocket实时应用(聊天室)
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用Node.js的socket.io模块开发实时web程序
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用Node.js的socket.io模块开发实时web程序
- 编写一个使用 Node.js/MongoDB Web 服务的 iOS 应用
- 使用Node.js开发一个在线聊天应用——编写前台
- 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】
- 10023---使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- 使用Node.js开发一个在线聊天应用——编写后台