httpServer是一个手机端提供轻量级的Web Server服务的插件。插件具有响应监听能力,更好的方便APIcloud开发者,纯粹利用JS处理网页请求以及响应返回数据。插件内封装了传统http的GET、POST请求,可以像服务器一样处理网页请求,处理响应。当然如果你懂内网映射外网,开发app成为服务器也不是什么难事。举个例子,利用本插件开发类似APP【Airmore】:通过局域网打开网页控制app文件上传、下载、控制等等。更多的利用方式由开发者们自己构建利用场景了。【PS:因为自己团队APP利用本插件,所以会长期更新,最新文档会最先更新在以下demo。】
为帮助用户更好更快的使用插件,论坛维护了一个示例,示例中包含示例代码、知识点讲解、注意事项等,供您参考。
开启HTTP服务,开启指定端口,指定手机文件路径为根目录供网页访问。
注意:1.安卓请勿重复两次执行start接口,会造成stop接口失效,导致关闭服务器失灵(提供运行状态检测同步接口runSync,可以避免)。
2.APP切换至后台,HTTP服务暂停,无法访问,切回后恢复访问。
start({params},callback(ret, err))
www
port
ret:
{
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:
{
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及更高版本
关闭HTTP服务。
stop(callback(ret, err))
ret:
{
status: true //布尔型;true||false,关闭成功。
}
err:
{
code: -1 //数字类型;
//错误码:
//-1(未知错误)
}
var httpServer = api.require('httpServer');
httpServer.status(function(ret, err){
if(ret.status){
alert("关闭成功");
}else{
alert('关闭失败');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
异步获取IP。
getIp(callback(ret, err))
ret:
{
ip:"192.168.0.128", //字符类型;目前只提供ipv4,手机开热点时返回手机热点IP,无任何网络返回null;
status: true //布尔型;true||false,IP获取成功。
}
err:
{
code: -1 //数字类型;
//错误码:
//-1(未知错误)
}
var httpServer = api.require('httpServer');
httpServer.getIp(function(ret, err){
if(ret.status){
alert("触发成功");
}else{
alert('触发失败');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
网页请求后的监听接口。网页被加载或者POST或者GET请求后,监听接口收到数据,并对数据开始处理保存响应等操作,最后可以用response或者responseSync接口作出当次请求的响应。
addEventListener(callback(ret, err))
ret:
例如: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:
{
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及更高版本
异步请求响应接口(addEventListener收到带参数监听,就会进入30秒等待响应,如果不写响应代码,则该请求30秒后回调页面400)
response({params}, callback(ret, err))
sid
data
ret:
{
status: true //布尔型;true||false,响应成功。
}
err:
{
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及更高版本
同步获取IP;
ipSync()
var httpServer = api.require('httpServer');
var ip=httpServer.ipSync(); //字符类型,目前只提供ipv4,手机开热点时返回手机热点IP,无任何网络返回null;
iOS系统,Android系统
可提供的1.0.0及更高版本
同步获取端口;
portSync()
var httpServer = api.require('httpServer');
var port=httpServer.portSync(); //字符类型,目前开启服务的端口号;
iOS系统,Android系统
可提供的1.0.0及更高版本
同步获取当前提供访问的真实文件路径;
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();
var httpServer = api.require('httpServer');
var isrun=httpServer.runSync(); //布尔型;true||false,是否运行。
iOS系统,Android系统
可提供的1.0.0及更高版本
同步请求响应接口(addEventListener收到带参数监听,就会进入30秒等待响应,如果不写响应代码,则该请求30秒后回调页面400);
responseSync({params});
sid
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及更高版本