研究了几天,终于完成了cocos、node.js \mysql的数据传递,其中最大的困难在于node.js异步执行,然后查询到的数据,cocos拿不到。
为了让大家少走些弯路,我把 它们分享出来。
-
cocoscreator
场景中拖个Label ,
然后写 个脚本,挂 在Canvas上。把Label拖到右边 mylab上。
/////脚本如 下
cc.Class({
extends: cc.Component,properties: {
mylab: cc.Label,
},// LIFE-CYCLE CALLBACKS:
onLoad() {
// this.text = “abc”;
// this.mylab=this.node.
// cc.log(this.mylab);},
start() {
this.sendPostRequest();
},sendPostRequest() {
var str = “name=zzz&password=123456”
var ServerLink = “http://127.0.0.1:6868”;
var xhr = new XMLHttpRequest();
var response = “”;
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status <= 400)) {
console.log(“连接成功”);
response = xhr.responseText;
// successCallback(response);
//this.text = response;
console.log(“里面:” + response);
}
};xhr.open("POST", ServerLink, false);//false表示同步,设置true返回不了数据 // xhr.setHeader("Access-Control-Allow-Origin","*"); //xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xhr.send(str); //this.text = response; console.log(response); // response=JSON.stringify(response); //var txt=[{"name":"zzz","pws":"123"}]; response = JSON.parse(response); cc.log(response[0]["name"]); console.log("外面:" + response); //response= JSON.parse(response); this.mylab.string = response[0]["pws"];},
// update (dt) {
// cc.log(“外面:”+this.text);
// },
});
////另外新建 一个JS,好像不能和 cocos放在一起,要放在另外的一个文件夹中。
/////数据库注意修改下,我用的数据库叫whq ,里面有个表叫 go,表里两个字段name,pws
////这个文件保存后,在vs code中,扩展商店中 安装 code runner,然后在脚本里右击,选择 run code,就可以启动监听了。当然也可以在命令行窗口中用 node 启动它。
console.info("------ mysql query() ------");
console.info();
var http = require(“http”); // TODO: 引入HTTP模块
var querystring = require(‘querystring’);
//var mysql = require(’/usr/local/lib/node_modules/mysql’); // TODO: 引入mysql模块
var mysql = require(‘mysql’);
console.log(“Now start HTTP server on port 6868…”);
console.info();
/**
-
创建数据库连接
/
var connection = mysql.createConnection({
host: “localhost”, // TODO: 主机地址
user: “root”, // TODO: 数据库用户名
password: “123456”, // TODO: 数据库密码
database: “whq”, // 改成 自己的数据库名字
port: 3306 // TODO: 端口号
});
/* -
创建HTTP服务器
*/
http.createServer(function (req, res) {
var body = “”;
req.on(‘data’, function (chunk) {
body += chunk; //一定要使用+=,如果body=chunk,因为请求favicon.ico,body会等于{}
//console.log(“chunk:”, chunk);});
// console.log(“body:”, body);
req.on(‘end’, function () {
// 解析参数
body = querystring.parse(body); //将一个字符串反序列化为一个对象
console.log(“body:”, body); //下面要把 表名 go 改成你自己的数据库里的表名
connection.query(‘select * from go where name = "’ + body.name + ‘"’, function (error, rows, fields) {
res.setHeader(“Access-Control-Allow-Origin”, “*”);
res.writeHead(200, { “Contenta-Type”: “text/html;charset=utf8” });
//res.write(“测试 Node.js - MySQL 数据库查询操作!
”);
console.log(rows);
res.end(JSON.stringify(rows));
});
});
}).listen(6868); // TODO: 监听6868端口号
//////在cocoscreat 中,开始调试,应该可以看到Label里的内容变化了。
/////后续可以用UI组件,做登录,注册啥 的
