NodeJs与ActionScript的GET和POST通讯

今天项目遇到一个小问题,做了个小功能,向服务端发送GET请求,但是服务端解析数据是时候报语法错误,如下:

make Request data error:SyntaxError: Error #1132: 无效的 JSON 解析输入。
Error #2044: 未处理的 error:。 text=make Request data error:SyntaxError: Error #1132: 无效的 JSON 解析输入。

很明显,引发报错的原因是服务端把这个数据当作JSON格式去解析了,但是我发送的格式是BINARY,所以导致报错了。

服务端的哥们叫我发了好几遍请求地址给他,发给他的时候他觉得GET请求的参数应该是这样的url?key=value&.....

为了证明给他看,GET请求不一定是这样子的,我自己写了一个NodeJS和ActionScript通讯的小Demo给他看。

NodeJS方代码如下:

 1 var http = require(‘http‘);
 2 var fs = require(‘fs‘);
 3 var path = require(‘path‘);
 4 var mime = require(‘mime‘);
 5 var querystring = require(‘querystring‘);
 6 var url = require(‘url‘)
 7 var cache ={};
 8
 9 var postserver = http.createServer(function(request, response){
10     request.addListener("data", function(chunk){
11         console.log(‘Get data from : ‘+request.url + " ======= length : " + chunk.length);
12         console.log(‘Name From Request : ‘ + chunk);
13     });
14 });
15
16 var gettserver = http.createServer(function(request, response){
17     var params = url.parse(request.url, true);
18     console.log(params);
19     response.end();
20 });
21
22 postserver.listen("8889", function(){
23     console.log("===========Server now listenling:8889====================");
24 });
25 gettserver.listen("8887", function(){
26     console.log("===========Server now listenling:8887====================");
27 });

客户端ActionScript代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
 3                xmlns:s="library://ns.adobe.com/flex/spark"
 4                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="onInit()">
 5     <fx:Declarations>
 6         <!-- Place non-visual elements (e.g., services, value objects) here -->
 7     </fx:Declarations>
 8     <fx:Script>
 9         <![CDATA[
10             private var request:URLRequest;
11             private var loader:URLLoader;
12             private var urlData:URLVariables;
13             private function onPostClicked():void
14             {
15                 // TODO Auto Generated method stub
16                 request.method = URLRequestMethod.POST;
17                 request.url = "http://localhost:8889";
18                 urlData.name = "POST";
19                 doRequest();
20             }
21
22             private function onGetClicked():void
23             {
24                 // TODO Auto Generated method stub
25                 request.method = URLRequestMethod.GET;
26                 request.url = "http://localhost:8887";
27                 urlData.name = "GET";
28                 doRequest();
29             }
30
31             private function doRequest():void
32             {
33                 loader.load(request);
34             }
35
36             private function onInit():void
37             {
38                 // TODO Auto Generated method stub
39                 request = new URLRequest();
40                 loader = new URLLoader();
41                 urlData = new URLVariables();
42                 request.data = urlData;
43                 loader.dataFormat = URLLoaderDataFormat.BINARY;
44                 loader.addEventListener(Event.COMPLETE, onComplete);
45                 loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
46                 Security.allowDomain("*");
47             }
48
49             protected function onComplete(event:Event):void
50             {
51                 // TODO Auto-generated method stub
52                 trace("Success......");
53             }
54
55             protected function onError(event:IOErrorEvent):void
56             {
57                 // TODO Auto-generated method stub
58                 trace("Fail......");
59             }
60         ]]>
61     </fx:Script>
62     <s:Button label="SEND GET" click="onGetClicked()" width="100" height="30" x="10" y="10"/>
63     <s:Button label="SEND POST" click="onPostClicked()" width="100" height="30" x="10" y="50"/>
64 </s:Application>

客户端效果图:

点击SEND GET按钮会向NodeJs服务端以get方式请求,

点击SEND POST按钮则会向NodeJs服务端以post方式发送请求。

服务端结果如下:

这个是收到一次GET请求和一次POST请求的结果。

在最初的时候,我将POST请求的处理和GET请求的处理都写到了同一个处理函数里面去,但是GET请求会成功,console不会打印信息,不知道是啥子原因,于是将GET请求的端口与POST请求的端口分开来,GET端口会打印相关内容了。

暂时不知道是什么原因,后续研究之后会update。

UPDATE:特喵的,发现居然是客户端解析问题,服务端的结果返回没有用JSON格式化。

时间: 2024-10-14 18:21:40

NodeJs与ActionScript的GET和POST通讯的相关文章

nodejs+expressjs+ws实现了websocket即时通讯,服务器和客户端互相通信

nodejs代码 // 导入WebSocket模块: const WebSocket = require('ws'); // 引用Server类: const WebSocketServer = WebSocket.Server; // 实例化: const wss = new WebSocketServer({ port: 3001 }); wss.on('connection', function (ws) { console.log(`ws 已经连接上`); ws.on('message'

HTML5+NodeJs实现WebSocket即时通讯

产品网站中很多地方需要用到实时交互,web端的实时交互. 具体为活动抽奖案例: 现场一个大屏,显示中奖人列表相关信息: 主持人一个pad控制开始抽奖结束抽奖: 每个活动现场的观众的手机.用来摇动手机进行抽奖 毫无疑问用websocket,WebSocket相较于HTTP来说,有很多的优点,主要表现在WebSocket只建立一个TCP连接,可以主动推送数据到客户端,而且还有更轻量级的协议头,减少数据传送量.所以WebSocket暂时来说是实时通讯的最佳协议了 至于服务器语言选择nodeJs,是因为

NodeJs多进程和socket.io通讯-DEMO

一.开启多进程 const os = require('os'); const cp = require('child_process'); const forkList = {}; const forkPrefix = 'fork_'; let cpusLen = os.cpus().length; let port = 9562; for (var i = 1; i <= cpusLen; i++) { forkList[forkPrefix + i] = cp.fork(`${__dirn

nodejs学习资料

NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS

nodejs 后台服务启动

最近一个项目微信小程序,需要写个小型的后端程序处理聊天通讯记录保存,主要是功能是组建群聊天室,所以用node写了个websocket服务... 但是终端连接到服务器,运行 node server.js, 退出终端之后,服务就停止运行了.原以为 node server.js & 或者 nohup node server.js >/dev/null 2>&1 & 能轻松的解决,后来发现完全不是那么回事..........谷歌了一番资料,了解到 nodejs一般是当成一条用户

nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token

最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验证身份,流程如下: 流程如下: 1.客户端获取用户id,并向服务器请求token(注意这里的服务器不是融云的服务器,而是客户端的服务端) 2.客户端的服务端接收到token请求后,向融云的服务器请求token 3.融云服务器接受到token请求,返回token给客户端的服务端. 4.客户端的服务端接

七天学会NodeJS

NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS

用NodeJS打造可扩展聊天服务

利用Nodejs实现即时通讯的选择最常见的就是socket.io, 首先来说说socket.io 优势: 1. 上手容易 2. 社区活跃(评价优秀开源项目的重要指标) 3. 对开发者友好, 避免开发者适配IE等不支持websocket的浏览器 4. 生态完整, 有对应Android,iOS SDK 缺点: 坑1. 一上生产环境就各种内存高或者cpu占用高 坑2. 扩展性 坑3. 从0.9x的不兼容性升级 坑1 内存问题的解决 socket.io在跑一段时间后, 内存占用并没有下来,猜测难道断开连

《NodeJS开发指南》学习笔记

欢迎大家指导与讨论 : ) 注:此笔记是基于<NodeJS开发指南>,并不是原著. 第一章——NodeJS简介 NodeJS是一个可以让Javascript运行在服务器端的平台,它为实时Web应用(Real-time Web)开发而生.拥有实时响应,超大规模数据要求下架构的可扩展性.它采用了单线程.异步式I/O.事件驱动式的程序设计模型.统意义上,Javscript是由ECMA.DOM.BOM组成. NodeJS采用的是单线程模型,对于所有的I/O都采用异步式的请求方式,避免了频繁的上下文切换