CocosCreator + SocketIO + MySQL 简易教程(图裂已修复)

http://www.cocoachina.com/bbs/read.php?tid=458895&page=1&toread=1#tpc
New: 教程司令部已经更新了教程 往后不再使用链式的教程结构

承接上一篇帖子的教程 “CocosCreator + socketIO简易教程”

我们继续在CocosCreator + SocketIO 的基础上 添加MySQL数据库驱动

这次的教程为实现一个简易的登录验证

我们从已经安装了CocosCreator 懂得建立HelloWorld项目
已经实现“<简易教程之你连我干嘛>” 完全不知道Mysql是啥 的前提开始讲

首先下载并安装MySQL (windows) http://pan.baidu.com/s/1bnWzsOf,1

因为我电脑里面已经安装了 就不再演示安装了 借用别人的图来示范一下 不大一样 不过差不多

这里注意几点 首先是安装方式选择custom 然后下面能改路径的都改了 不需要装在系统盘

我没有特殊提起的按默认处理吧

然后选择继续配置

在编码选择的时候 切记要选择UTF-8

后面还有一个登陆密码的选择 在这里作为学习用 和我后面的代码保持一样吧 我设的密码是: “123456”

我不大记得是不是需要设置账号名了 如果需要的话设置为 “root” 总之不是什么很困难的事

然后就一路下一步就行了

完成后mysql就安装完成了

我的可能没有设置路径吧 cmd下输入mysql是没有反应的 不过我也不打算在黑框框下敲SQL

下面我们用 sqlyog 来操作数据库 它是一个可视化操作数据库的工具

首先下载并安装吧 记得要先打开压缩文件找到里面的密码 然后再解压 http://pan.baidu.com/s/1eRczad8,1

这个是绿色免安装的

sn.txt 里面是等会注册软件的账号和密码

这个是安装目录

验证完成后 就会进入这个界面 如果安装没有意外的话 账号为 root 密码为 123456 端口为3306(默认)

然后点连接 将进入主界面 后面关于数据库的部分 我们边向完成登录验证的目标推进 一边学习吧

对着root@localhost 鼠标右键 -> 创建数据库

数据库名字我们处于学习目的 和我的代码一致吧 写为"db_user" 前面的db为database的缩写

后面的default 我们就不动了 之前安装时选择UTF-8编码就是为这个服务的

点击创建 就会在左侧显示新的数据库了

然后鼠标指向db_user下的 table 鼠标右键 ->创建表 进入表创建界面

因为我们要做的是登录验证 那么我们就只留下两项 用户名和密码
(userName varchar 20 pk not null | password varchar 20 )
varchar为字符串类型 20为长度 pk not null 为主键 主键就是唯一标示一条记录的标识

然后创建表 表名 填写为 “t_user” t为table的缩写 然后就选择不继续创建表了

然后我们就写一条测试数据吧 先切换到数据表界面

用户名和密码分别写为 “linhaiwei123” “asd520” 完了之后可以自己去改来试一下 现在先这么写吧 你可以填多几条测试数据 效果会好一点 这里不赘述 写完点击Refresh 保存

好了 SQLyog可以关掉了 关于数据库部分的搭建和准备就先告一段落了

现在我们用Node.js来访问数据库吧

首先下载和安装 mysql驱动模块

在node.js安装目录下(有node_module node.exe 的目录下) 按住shift + 鼠标右键 -> 在此处打开命令行
输入 npm install --save mysql
稍等几秒后就会安装完成

然后开始写一个node.js访问数据库的测试代码吧

然后运行一下看看吧

我们已经连接到数据库了

但是呢 这个样子的连接会有一点点问题 我们连接一次 就关掉了 有点浪费 我们写一个连接池吧 很简单的 就改两句话

然后再运行一下吧

好吧其实没什么区别 然后还有一点点的问题 如果我们要做登录验证 一个简单思路就是 在表里面查 有没有用户名和密码能匹配上 匹配上能登录成功 匹配不上就登录失败

那么就需要将用户名和密码嵌入到查询语句里面 怎么嵌入呢 一种就是用字符串的拼接 不过太粗鲁了 我们用点优雅的方式

比如这个样子 sql中需要嵌入的项 比如用户名 密码 用?代替 然后需要嵌入的项 单独用数组来存

然后再运行一下吧 (停止node.js的快捷键是 ctrl + c)

好了 至此我们已经具备使用node.js连接数据库和查询数据库记录的能力了

请将node.js连接数据库的内容先告一段落

我们下面学习如何在cocosCreator 和 node.js之间传输多条数据 (在上一篇教程中 我们学习了单条数据的传送 我们这次要一次传输多条数据)

首先是cocosCreator中 myapp.js onload 下

这个node.js 代码

运行效果如图

这里不好的地方呢 就是 如果我要再传一份一模一样的数据 就要再敲一遍了 我们不妨先将要传输的数据先保存一遍 保存在user2中

另外 我们可能会面对 node.js根本不知道传过来的数据有什么 我不知道里面有什么键 我只是单纯的想要你所知道的都告诉我

于是我们的serverTwo.js可以这样写 通过for in循环获取键 并通过键获取值

然后运行效果如图

但是这样还有一个缺点 user对象直接就在onload里面创建了 如果有多个js文件都要用 那就要每个都敲一遍了 我们不妨从外部导入构造函数 并创建一个新的user实例 命名为user3

在script文件夹下 创建一个javascript 重命名为user.js

然后写下user的构造函数 用module.exports = User; 使得构造函数可以供外面访问 这里还有另外一个创建公共接口的方式为exports = func() 我的理解是 如果需要向外输出一个对象 可以用module.exports 而如果只是需要调用一个函数 用exports就可以了

后台代码不变 我们运行一下

到这个 我们已经具备了CocosCreator和Node.js之间自由传输数据的能力

回顾一下 我们已经具备了一下两种能力

  • node.js <=> mysql
  • CocosCreator <=> node.js

现在我们要做一个组合 通过写一个登录验证

  • CocosCreator <=> node.js <=> mysql

其实 CocosCreator端 和mysql端 不需要做很大的变动

关键是访问前台的node.js 和访问数据库的node.js如何结合起来

我们一步一步来吧 前端代码不需要修改 就修改用户名和密码就行

然后呢 我们要改一下node.js

然后呢 我们对访问mysql的node.js 做一点点修改 以适应访问CocosCreator端node.js的require()请求

好了 我们再修改一下包路径配置 在NODE_PATH最前面 添加.;(句号+分号) 表示可以从当前目录下找包 和java配置环境的道理一样

我们将logindao.js和serverFinal.js放在同一目录下 在DOS框下运行node serverFinal.js

然后在CocosCreator中点击运行

然后我们修改myapp.js onload 中 用户名为linhawei124 重启服务器 再次运行

到这里我们已经完成简易的登录验证 也具备了基本的CocosCreator+SocketIO+MYSQL的交互能力

注意到 我在logindao.js中 中文的传输用的是unicode 而不是直接用中文 因为直接用中文会乱码

这里推荐一个网址 可以在线进行中文转unicode http://tool.chinaz.com/Tools/Unicode.aspx

在上方输入中文 点击右中间 中文转unicode 然后复制下面的unicode码 取代原来代码中的中文就可以了

然后源码在这里

http://pan.baidu.com/s/1i3ZAYMx,1

本来的计划是依据输入框 动态地修改用户名和密码 并在此基础上继续完成一个群聊的功能 再根据tilemap完成一个在线社区吧

但是tilemap 和 输入框 的功能都需要等到3月初才能方出来 那就到时候再继续完成吧

后续会推出关于帧动画 动画响应的教程

本次教程仅仅涵盖了需要和常用的内容 其他内容请在需要时自行查询 后续也可能会补全这一部分内容

http://www.cocoachina.com/bbs/read.php?tid=458895&page=1&toread=1#tpc

http://www.cocoachina.com/bbs/read.php?tid-458312.html

6赞

要不要这么速度啊大哥,这教程刷刷的出。

比上一篇教程复杂了不少,慢慢啃

写的很不错,支持,持续学习中!

战略性顶帖

这种瞌睡有人送枕头的赶脚,大膜lz

软件里测试游戏 完美运行

构建出来 预览 竟然是黑屏 怎么解决呢

=。=据说SocketIO在native上有问题。坐等抢修

LZ 求教 NODE_PATH : F:\Node.js\Root\node_modules (这个是我的Node.js安装路径下node_module文件夹的路径 你应当指到自己电脑上node.js安装路径下node_module文件夹)
这个在mac上面怎么配置呢

给你32个赞!

点赞 :2::2::2::2:

SocketIO 目前版本在 iOS native 上无法连接,这个会在 1.1 中修复

请问一下这些代码在哪写呀,求解,谢谢啦:blush:

我在cmd中输入这个npm install --save mysql时出错了怎么解决
C:\Program Files (x86)\nodejs>npm install --save mysql
npm ERR! Windows_NT 10.0.10586
npm ERR! argv “C:\Program Files (x86)\nodejs\node.exe” “C:\Program Files (x86)\nodejs\node_modules\npm\bin\npm-cli.js” “install” “–save” “mysql”
npm ERR! node v4.2.6
npm ERR! npm v2.14.12
npm ERR! path C:\Program Files (x86)\nodejs\node_modules\mysql\Readme.md
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall unlink

npm ERR! Error: EPERM: operation not permitted, unlink ‘C:\Program Files (x86)\nodejs\node_modules\mysql\Readme.md’
npm ERR! at Error (native)
npm ERR! { [Error: EPERM: operation not permitted, unlink ‘C:\Program Files (x86)\nodejs\node_modules\mysql\Readme.md’]
npm ERR! errno: -4048,
npm ERR! code: ‘EPERM’,
npm ERR! syscall: ‘unlink’,
npm ERR! path: ‘C:\Program Files (x86)\nodejs\node_modules\mysql\Readme.md’ }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! error rolling back Error: EPERM: operation not permitted, unlink ‘C:\Program Files (x86)\nodejs\node_modules\mysql\License’
npm ERR! error rolling back at Error (native)
npm ERR! error rolling back { [Error: EPERM: operation not permitted, unlink ‘C:\Program Files (x86)\nodejs\node_modules\mysql\License’]
npm ERR! error rolling back errno: -4048,
npm ERR! error rolling back code: ‘EPERM’,
npm ERR! error rolling back syscall: ‘unlink’,
npm ERR! error rolling back path: ‘C:\Program Files (x86)\nodejs\node_modules\mysql\License’ }
npm ERR! Windows_NT 10.0.10586
npm ERR! argv “C:\Program Files (x86)\nodejs\node.exe” “C:\Program Files (x86)\nodejs\node_modules\npm\bin\npm-cli.js” “install” “–save” “mysql”
npm ERR! node v4.2.6
npm ERR! npm v2.14.12
npm ERR! path C:\Program Files (x86)\nodejs\npm-debug.log.6f710e8966a01e5963cae80c2c46e954
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall open

npm ERR! Error: EPERM: operation not permitted, open ‘C:\Program Files (x86)\nodejs\npm-debug.log.6f710e8966a01e5963cae80c2c46e954’
npm ERR! at Error (native)
npm ERR! { [Error: EPERM: operation not permitted, open ‘C:\Program Files (x86)\nodejs\npm-debug.log.6f710e8966a01e5963cae80c2c46e954’]
npm ERR! errno: -4048,
npm ERR! code: ‘EPERM’,
npm ERR! syscall: ‘open’,
npm ERR! path: ‘C:\Program Files (x86)\nodejs\npm-debug.log.6f710e8966a01e5963cae80c2c46e954’ }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

也就是说在安卓上,SocketIO没有问题是吗?

在myapp.js onload这步卡住了…myapp.js onload和serverOne.js是什么关系?求解答= =

是说myapp.js在工程load成功之后立即通过severOne.js这个文件向MYSQL发送一条新数据吗?

不明白为什么那么多人写教程。感觉写起来挺费时间和精力的,不过感谢一路上那些写教程的人。

我代表全世界谢谢你