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,可以避免)。
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及更高版本