资讯专栏INFORMATION COLUMN

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

jsdt / 814人阅读

摘要:吐完槽,还是开始第十二部分的改动吧,这是开始涉及到数据库了,原文用我用改动就比较大了。后篇使用开发一个角色投票应用的学习过程三

前篇

使用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开发一个角色投票应用的学习过程(三)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79391.html

相关文章

  • 使用ReactNode.jsMongoDBSocket.IO开发一个角色投票应用学习过程(一

    摘要:本项目是对使用开发一个角色投票应用的学习过程。到这里为止没有遇到多大的坑,最多的往往是拼写错误引起的问题,唯一由于拼写导致,但不提示错误的是我打成了运行的时候服务器一直没有响应,找了好久才找到这个错误后篇使用开发一个角色投票应用的学习过程二 本项目是对使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程。 英文原文:Create a char...

    loonggg 评论0 收藏0
  • 使用ReactNode.jsMongoDBSocket.IO开发一个角色投票应用学习过程(三

    摘要:将就用一下,能实现相同的功能就可以了。的方法可以从返回最大值,但是新版中的不行,只能通过这样的方式返回最大值。 前篇 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(一)使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(二) 原文第十三步,Express API路由 第一个路由是用来创建角...

    JessYanCoding 评论0 收藏0
  • node技术栈 - 收藏集 - 掘金

    摘要:异步最佳实践避免回调地狱前端掘金本文涵盖了处理异步操作的一些工具和技术和异步函数。 Nodejs 连接各种数据库集合例子 - 后端 - 掘金Cassandra Module: cassandra-driver Installation ... 编写 Node.js Rest API 的 10 个最佳实践 - 前端 - 掘金全文共 6953 字,读完需 8 分钟,速读需 2 分钟。翻译自...

    王伟廷 评论0 收藏0
  • 【全栈】使用Node、Express、Angular、MongoDB构建一个实时问卷调查应用程序

    摘要:鉴于此目的,我决定快速构建一个用于此目的的问卷调查应用程序。这将启动一个服务器并将应用程序部署到该服务器。图应用程序配置基础前端这个问卷调查应用程序对常见用户界面和布局使用了框架。 全栈教程。转自 使用 Node.js、Express、AngularJS 和 MongoDB 构建一个实时问卷调查应用程序 最近,在向大学生们介绍 HTML5 的时候,我想要对他们进行问卷调查,并向他们显...

    BigTomato 评论0 收藏0

发表评论

0条评论

jsdt

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<