httpServer

来自于:开发者立即使用

概述

httpServer是一个手机端提供轻量级的Web Server服务的模块。模块具有响应监听能力,更好的方便APIcloud开发者,纯粹利用JS处理网页请求以及响应返回数据。模块内封装了传统http的GET、POST请求,可以像服务器一样处理网页请求,处理响应。当然如果你懂内网映射外网,开发app成为服务器也不是什么难事。举个例子,利用本模块开发类似APP【Airmore】:通过局域网打开网页控制app文件上传、下载、控制等等。更多的利用方式由开发者们自己构建利用场景了。【PS:因为自己团队APP利用本模块,所以会长期更新,最新文档会最先更新在以下demo。】

实例widget下载地址

论坛示例

为帮助用户更好更快的使用模块,论坛维护了一个示例,示例中包含示例代码、知识点讲解、注意事项等,供您参考。

start

开启HTTP服务,开启指定端口,指定手机文件路径为根目录供网页访问。

注意:1.安卓请勿重复两次执行start接口,会造成stop接口失效,导致关闭服务器失灵(提供运行状态检测同步接口runSync,可以避免)。

 2.APP切换至后台,HTTP服务暂停,无法访问,切回后恢复访问。

start({params},callback(ret, err))

params

www

  • 类型: 字符类型;
  • 描述:(必填项)开启服务的真实文件路径。
  • 备注:支持api的真实路径函数,如:api.fsDir+"/文件夹名",或者是其他模块提供的真实地址路径类似如下: /var/mobile/Containers/Data/Application/4E376FDE-D595-4E08-B0A4-A06561B31000/Documents/uzfs/A123456789
  • 推荐使用:
        api.fsDir【清缓存时不清除】
        api.cacheDir【清缓存时清除】
    
  • 不推荐使用:api.wgtRootDir【1、不能使用全局加密,否则页面加载出的乱码页面。2、不能实现POST文件上传】
        api.boxDir【安卓不能实现POST文件上传】
    

port

  • 类型: 数字类型;
  • 描述: 开启服务的端口号,默认:2633;取值范围0到65535
  • 备注:例如内网地址:http://192.168.0.1:2633 即对应2633部分。安卓手机,不建议取80、8080、433等常用接口,普遍存在端口占有情况导致无法访问;

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:
{
    status: true      //布尔型;true||false,当前模式振动是否触发成功。
   ,www: "/var/mobile/Containers/Data/Application/4E376FDE-D595-4E08-B0A4-A06561B31000/Documents/uzfs/A123456789"  //字符类型;启动服务器的文件夹真实路径。
   ,port: "2633"      //字符类型;启动服务器的端口。
   ,ip: true      //字符类型;启动服务器的IP。目前只提供ipv4,手机开热点时返回手机热点IP,无任何网络返回null;
}

err:

  • 类型:JSON对象
  • 内部字段:
{
    code: -1     //数字类型;
                //错误码:
                //-1(未知错误)
}

示例代码

var httpServer = api.require('httpServer');
httpServer.start(
  {
  www:api.fsDir,
  port:2633
  },function(ret, err){
    alert(JSON.stringify(ret));
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

stop

关闭HTTP服务。

stop(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:
{
    status: true      //布尔型;true||false,关闭成功。
}

err:

  • 类型:JSON对象
  • 内部字段:
{
    code: -1     //数字类型;
                //错误码:
                //-1(未知错误)
}

示例代码

var httpServer = api.require('httpServer');
httpServer.status(function(ret, err){
    if(ret.status){
        alert("关闭成功");
    }else{
        alert('关闭失败');
    }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

getIp

异步获取IP。

getIp(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:
{
    ip:"192.168.0.128",    //字符类型;目前只提供ipv4,手机开热点时返回手机热点IP,无任何网络返回null;
    status: true          //布尔型;true||false,IP获取成功。
}

err:

  • 类型:JSON对象
  • 内部字段:
{
    code: -1     //数字类型;
                //错误码:
                //-1(未知错误)
}

示例代码

var httpServer = api.require('httpServer');
httpServer.getIp(function(ret, err){
    if(ret.status){
        alert("触发成功");
    }else{
        alert('触发失败');
    }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

addEventListener

网页请求后的监听接口。网页被加载或者POST或者GET请求后,监听接口收到数据,并对数据开始处理保存响应等操作,最后可以用response或者responseSync接口作出当次请求的响应。

addEventListener(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:

例如:POST带两个二进制文件上传请求 http://192.168.0.128:2633/aa/index.html?bb=123&cc=456 上传的文件名:432.jpg和789.png(安卓版:文件名是中文上传会被保存时重命名)

{
    sid: "157535859456782309",                  //字符类型;18位请求识别码,response、responseSync接口做请求响应时需要使用。
    method: "POST",                             //字符类型;GET||POST,请求类型。
    url: "/aa/index.html",                      //字符类型;当次请求的文件,包含相对根目录的文件路径。
    query: {bb:"123",cc:"456"},                 //对象类型;对应url请求下?后的url数据和POST的data数据。
    files: [
      {name:"432.jpg",path:"/aa/432.jpg"},      // 保存文件夹名会于url中的相对aa路径对应,没有时会对应新建文件夹。
    {name:"789.png",path:"/aa/789.png"}
     ]                                          //数组类型;多个文件时累加。文件名和全路径(超大文件上传时文件名会提前输出,数据后置保存)
}

重要提示:例子中因为存在url参数(即?后面的或者文件上传),请求进入response或者responseSync接口30秒等待响应,而不会取读取/aa/index.html输出页面。正常页面加载的请求请不要后面带?参数,保证请求文件存在即可。 err:

  • 类型:JSON对象
  • 内部字段:
{
    code: -1     //数字类型;
                //错误码:
                //-1(未知错误)
}

示例代码

var httpServer = api.require('httpServer');
httpServer.addEventListener(function(ret){  alert(JSON.stringify(ret));
  if (ret.query){
  httpServer.responseSync({sid:ret.sid,data:{xiang:ret.query}});
  }else{
  console.log(JSON.stringify(ret.url));
  }                      

    });

为之方便跨Frame和Win监听数据需求的开发者,本模块另外提供api.addEventListener的监听接收数据,两个addEventListener二选一不能同时使用,示例代码如下

api.addEventListener({
        name: 'httpServer'
            }, function(ret){var res=ret.value;
            if (res.query){
            httpServer.response({sid:res.sid,data:{xiang:res.query.aa}});

            }else{
    console.log(JSON.stringify(res.url));
            }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

response

异步请求响应接口(addEventListener收到带参数监听,就会进入30秒等待响应,如果不写响应代码,则该请求30秒后回调页面400)

response({params}, callback(ret, err))

params

sid

  • 类型: 字符类型;addEventListener监听到后自动产生18位请求识别码;
  • 描述:(必填项)

data

  • 类型: 对象类型;需要响应给当次的所有自定义数据。
  • 描述:(必填项)

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:
{
    status: true      //布尔型;true||false,响应成功。
}

err:

  • 类型:JSON对象
  • 内部字段:
{
    code: -1     //数字类型;
                //错误码:
                //-1(未知错误)
}

示例代码

var httpServer = api.require('httpServer');
httpServer.response(
  {sid:res.sid,                    //res为addEventListener监听到的数据;
    data:{xiang:res.query.aa}
  },function(ret,err){
      console.log(JSON.stringify(ret));
  }

);

特别注意:

因为responseSync执行后,页面会接收到执行url的数据结果是以字符串的形式接收,输出到页面,所以非页面数据ajax请求时,模块网页端的代码,需要通过 JSON.parse(ret)或ret=eval('('+ret+')')等方法进行字符串转换json;

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

ipSync

同步获取IP;

ipSync()

示例代码

var httpServer = api.require('httpServer');
var ip=httpServer.ipSync();  //字符类型,目前只提供ipv4,手机开热点时返回手机热点IP,无任何网络返回null;

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

portSync

同步获取端口;

portSync()

示例代码

var httpServer = api.require('httpServer');
var port=httpServer.portSync();  //字符类型,目前开启服务的端口号;

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

wwwSync

同步获取当前提供访问的真实文件路径;

wwwSync()

var httpServer = api.require('httpServer');
var www=httpServer.wwwSync();  //字符类型,目前提供访问的真实文件路径;例如:/var/mobile/Containers/Data/Application/4E376FDE-D595-4E08-B0A4-A06561B31000/Documents/uzfs/A123456789

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

runSync

同步获取当前服务的开启状态;

runSync();

示例代码

var httpServer = api.require('httpServer');
var isrun=httpServer.runSync();  //布尔型;true||false,是否运行。

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

responseSync

同步请求响应接口(addEventListener收到带参数监听,就会进入30秒等待响应,如果不写响应代码,则该请求30秒后回调页面400);

responseSync({params});

params

sid

  • 类型: 字符类型;addEventListener监听到后自动产生18位请求识别码;
  • 描述:(必填项)

data

  • 类型: 对象类型;需要响应给当次的所有自定义数据。
  • 描述:(必填项)

示例代码

var httpServer = api.require('httpServer');
var isresponse=httpServer.responseSync({sid:ret.sid,data:{xiang:ret.query}});  //布尔型;true||false,是否响应成功。

特别注意:

因为responseSync执行后,页面会接收到执行url的数据结果是以字符串的形式接收,输出到页面,所以非页面数据ajax请求时,模块网页端的代码,需要通过 JSON.parse(ret)或ret=eval('('+ret+')')等方法进行字符串转换json;

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本