Cocos Creator之客服端与服务器的简单交互

这篇我们主要讲客服端与服务器的交互,通俗点讲就是客服端发送请求给服务器,服务器收到请求后下发对应的数据。

这里我就不搭建服务器了,可以参考我的另一篇文章:搭建简单Node.js Express框架服务器 - 简书

Cocos Creator TypeScript入门教程:Cocos Creator + TypeScript 入门教程 - 简书

首先我们打开我们的服务器代码,添加请求接口,比如我们要发送请求获取用户的信息。我们可以在接口进入业务逻辑的处理和数据库的相关操作,通过res.send()函数返回数据给客服端。

服务器操作

添加请求接口

我们启动服务器测试下,输入网址:http://127.0.0.1:3000/userInfo,我们会获取到服务器下发的信息。

好了我们的服务器的操作就完成了,下面上代码

var express = require('express');

var app = express();

//监听端口

//主站http://127.0.0.1:3000

app.listen(3000);

//注册请求

app.get('/', function(req, res){

  res.send('欢迎使用express');

});

//注册用户信息请求

app.get('/userInfo', function(req, res){

  //输出json格式

    let response = {

      id:1,

      name:"阿狸",

      age:18

    };

    res.send(JSON.stringify(response));

  });

客服端操作

接下来就是客服端的操作了,我们创建一个空白项目,搭建一个简单的界面。点击层级管理器Canvas节点右键创建lable组件和button组件,通俗点说就是显示文字的文本和按钮。

我需要改变一下这两个组件的属性,点击创建的lable,我们可以在右侧修改它的属性,不知道英文是什么的意思的,可以把鼠标指针停留在上面会有对应的提示。


个人习惯我把lable和button重新命名了,并修改了Canvas的大小,改成手机竖屏720*1280

好了接下来是写代码了,新建一个index的ts脚本,在里面声明我们需要的一些属性类型和点击按钮触发的函数。

那我们怎么在客服端发送请求呢?需要我们写一个http的模块,回到我们的creator新建http.ts,这个类不要我们继承引擎的组件类。

const url = "http://127.0.0.1:3000";

export default class http {

    /**

    * 请求协议的方法

    * @param path 请求接口的路径

    * @param params 参数

    * @param callBack 回调函数

    */

    static get(path,params,callBack){

        var  requestUrl = url + path;

            var xhr = cc.loader.getXMLHttpRequest();

            // var data=self.paramData(params);

            var data = params;

            let param ='?';

            for(var key in data){

                var paramStr = key+"="+data[key];

                if(param == ""){

                    param += paramStr;

                }else {

                    param += "&"+paramStr;

                }

            }

            xhr.open("GET", requestUrl + param);

            xhr.timeout = 5000;//

            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");

            xhr.onreadystatechange = function () {

                if (xhr.readyState === 4 && xhr.status == 200 ) {

                    var respone = xhr.responseText;

                    console.log('响应参数')

                    console.log(respone)

                    callBack(JSON.parse(respone));

                }

            };

            xhr.send();

    }

}

然后我们在index.ts引入http模块,因为get方法是静态的我们可以直接用类名调用。

好了,我们现在返回界面,把脚本挂载在Canvas节点上。把lable拖到我们声明的属性中,并为按钮添加点击方法。

为按钮添加点击事件,点击button组件,找到ClickEvents属性把0该成1,然后把Canvas拖到node上

保存,我们打开浏览器运行,按f12可以打开调试模式,点击按钮后发现报错了,这是什么问题呢?原来是我们没有设置跨域。我们回到服务器设置就可以了。

设置跨域,然后重启我们的服务器

我们在运行我们的项目,点击按钮后发现没有报错,并且服务器有数据返回,我们需要把数据显示在我们的文本。

给文本赋值

好了,我们现在就完成了客服端和服务端的简单通信,下面附上完整代码

myserver.js

var express = require('express');

var app = express();

//设置跨域访问

app.all('*', function(req, res, next) {

  res.header("Access-Control-Allow-Origin", "*");

  res.header("Access-Control-Allow-Headers", "X-Requested-With");

  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");

  res.header("X-Powered-By",' 3.2.1');

  res.header("Content-Type", "application/json;charset=utf-8");

  next();

});

//监听端口

//主站http://127.0.0.1:3000

app.listen(3000);

//注册请求

app.get('/', function(req, res){

  res.send('欢迎使用express');

});

//注册用户信息请求

app.get('/userInfo', function(req, res){

  //输出json格式

    let response = {

      id:1,

      name:"阿狸",

      age:18

    };

    res.send(JSON.stringify(response));

  });

index.ts

import http from "./http"; //引入模块

const {ccclass, property} = cc._decorator;

@ccclass

export default class index extends cc.Component {

    @property(cc.Label)

    lable:cc.Label = null;      //显示用户信息的文本

    onLoad () {

    }

    start () {

    }

    // update (dt) {}

    //登录按钮点击事件

    OnLoginClick(){

        //我们需要在点击按钮后发送请求

        let _http = new http();

        _http.get("/userInfo",{},(res)=>{

            console.log("res",res);

            this.lable.string = "id:"+ res.id + ",名字:" + res.name + ",年龄:" + res.age;

        });

    }

}

http.ts

const url = "http://127.0.0.1:3000"; //服务器地址

export default class http {

    /**

    * 请求协议的方法

    * @param path 请求接口的路径

    * @param params 参数

    * @param callBack 回调函数

    */

    get(path,params,callBack){

        var  requestUrl = url + path;

            var xhr = cc.loader.getXMLHttpRequest();

            // var data=self.paramData(params);

            var data = params;

            let param ='?';

            for(var key in data){

                var paramStr = key+"="+data[key];

                if(param == ""){

                    param += paramStr;

                }else {

                    param += "&"+paramStr;

                }

            }

            xhr.open("GET", requestUrl + param);

            xhr.timeout = 5000;//

            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");

            xhr.onreadystatechange = function () {

                if (xhr.readyState === 4 && xhr.status == 200 ) {

                    var respone = xhr.responseText;

                    console.log('响应参数')

                    console.log(respone)

                    callBack(JSON.parse(respone));

                }

            };

            xhr.send();

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354