httpServer

来自于:开发者立即使用

start stop getIp addEventListener response ipSync portSync wwwSync runSync responseSync

概述

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

实例widget下载地址

论坛示例

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

start

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

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

  1. 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
  • 推荐使用:

    1. api.fsDir【清缓存时不清除】
    2. api.cacheDir【清缓存时清除】
  • 不推荐使用:api.wgtRootDir【1、不能使用全局加密,否则页面加载出的乱码页面。2、不能实现POST文件上传】

    1. api.boxDir【安卓不能实现POST文件上传】

port

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

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var httpServer = api.require('httpServer');
  2. httpServer.start(
  3. {
  4. www:api.fsDir,
  5. port:2633
  6. },function(ret, err){
  7. alert(JSON.stringify(ret));
  8. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

stop

关闭HTTP服务。

stop(callback(ret, err))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var httpServer = api.require('httpServer');
  2. httpServer.status(function(ret, err){
  3. if(ret.status){
  4. alert("关闭成功");
  5. }else{
  6. alert('关闭失败');
  7. }
  8. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

getIp

异步获取IP。

getIp(callback(ret, err))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var httpServer = api.require('httpServer');
  2. httpServer.getIp(function(ret, err){
  3. if(ret.status){
  4. alert("触发成功");
  5. }else{
  6. alert('触发失败');
  7. }
  8. });

可用性

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(安卓版:文件名是中文上传会被保存时重命名)

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

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

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

示例代码

  1. var httpServer = api.require('httpServer');
  2. httpServer.addEventListener(function(ret){ alert(JSON.stringify(ret));
  3. if (ret.query){
  4. httpServer.responseSync({sid:ret.sid,data:{xiang:ret.query}});
  5. }else{
  6. console.log(JSON.stringify(ret.url));
  7. }
  8. });

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

  1. api.addEventListener({
  2. name: 'httpServer'
  3. }, function(ret){var res=ret.value;
  4. if (res.query){
  5. httpServer.response({sid:res.sid,data:{xiang:res.query.aa}});
  6. }else{
  7. console.log(JSON.stringify(res.url));
  8. }
  9. });

可用性

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对象
  • 内部字段:
  1. {
  2. status: true //布尔型;true||false,响应成功。
  3. }

err:

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

示例代码

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

特别注意:

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

ipSync

同步获取IP;

ipSync()

示例代码

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

portSync

同步获取端口;

portSync()

示例代码

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

wwwSync

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

wwwSync()

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

runSync

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

runSync();

示例代码

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

responseSync

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

responseSync({params});

params

sid

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

data

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

示例代码

  1. var httpServer = api.require('httpServer');
  2. 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及更高版本