首页 > 代码库 > NodeJs与ActionScript的GET和POST通讯

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():void14             {15                 // TODO Auto Generated method stub16                 request.method = URLRequestMethod.POST;17                 request.url = "http://localhost:8889";18                 urlData.name = "POST";19                 doRequest();20             }21             22             private function onGetClicked():void23             {24                 // TODO Auto Generated method stub25                 request.method = URLRequestMethod.GET;26                 request.url = "http://localhost:8887";27                 urlData.name = "GET";28                 doRequest();29             }30             31             private function doRequest():void32             {33                 loader.load(request);34             }35             36             private function onInit():void37             {38                 // TODO Auto Generated method stub39                 request = new URLRequest();40                 loader = new URLLoader();41                 urlData = http://www.mamicode.com/new URLVariables();42                 request.data =http://www.mamicode.com/ urlData;43                 loader.dataFormat = URLLoaderDataFormat.BINARY;44                 loader.addEventListener(Event.COMPLETE, onComplete);45                 loader.addEventListener(IOErrorEvent.IO_ERROR, one rror);46                 Security.allowDomain("*");47             }48             49             protected function onComplete(event:Event):void50             {51                 // TODO Auto-generated method stub52                 trace("Success......");53             }54             55             protected function one rror(event:IOErrorEvent):void56             {57                 // TODO Auto-generated method stub58                 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格式化。

NodeJs与ActionScript的GET和POST通讯