美文网首页
Cocos Creator之客服端与服务器的简单交互

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

作者: 程序猿TODO | 来源:发表于2021-01-07 16:42 被阅读0次

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

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

首先我们打开我们的服务器代码,添加请求接口,比如我们要发送请求获取用户的信息。我们可以在接口进入业务逻辑的处理和数据库的相关操作,通过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();

    }

}

相关文章

网友评论

      本文标题:Cocos Creator之客服端与服务器的简单交互

      本文链接:https://www.haomeiwen.com/subject/zqizoktx.html