• 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格式化。

  • 相关阅读:
    Redis与Memcached汇总
    那些年掉进的坑之AngularJS篇
    常见的Regex表达式(更新RFC标准的email检验)
    让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
    Windows + Android + Cordova + ionic环境搭建
    less语法
    AngularJS 指令之 ng-style
    AngularJS 指令之 ng-if
    ionic之自定义 ion-tabs 图标
    AngularJS之延迟加载html template
  • 原文地址:https://www.cnblogs.com/adoontheway/p/4015618.html
Copyright © 2020-2023  润新知