博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(二)
阅读量:6927 次
发布时间:2019-06-27

本文共 3210 字,大约阅读时间需要 10 分钟。

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

前篇

这篇主要讲一下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 的一些基础用法可以参见我的这篇小文,或自行查看

在根目录下创建 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' 不然重启服务会清空清数据的。

后篇

    本文转自无心之柳.NET博客园博客,原文链接:http://www.cnblogs.com/9527/p/6144637.html,如需转载请自行联系原作者

你可能感兴趣的文章
扫盲 Linux:如何选择发行版
查看>>
色版黑莓Bold9900已经登岸香港市场
查看>>
报表服务入门(实验3)配置虚拟目录
查看>>
联合类型(union type )
查看>>
一图胜千言 -- SQL Server 监控
查看>>
Exchange-Exchange Server内部版本号和发行日期
查看>>
大数据实践总结分享
查看>>
VMware Workstation and Hyper-V are not compatible. Remove the ...
查看>>
mysql慢查询日志学习
查看>>
ADT学苑
查看>>
Android Studio 学习笔记 - 开发环境的架设
查看>>
Powershell从office365上 删除日历记录
查看>>
CentOS 6.4 Linux vsftpd shell管理系统脚本完整版
查看>>
Nginx之模块处理流程
查看>>
Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
查看>>
VMCloud见面礼——VMCloud博客迁移全记录
查看>>
三种算法转换色彩灰阶
查看>>
Skype for Business 2015 快速入门手册 v1.1
查看>>
微软私有云分享(R2)25集成WSUS
查看>>
批量删除2012年9月份以前的表
查看>>