/*
Title: httpServer
Description: httpServer
*/
[start](#a1)
[stop](#a2)
[getIp](#a3)
[addEventListener](#a4)
[response](#a5)
[ipSync](#a6)
[portSync](#a7)
[wwwSync](#a8)
[runSync](#a9)
[responseSync](#a10)
#**概述**
[httpServer](http://www.cvvos.com)是一个手机端提供轻量级的Web Server服务的模块。模块具有响应监听能力,更好的方便APIcloud开发者,纯粹利用JS处理网页请求以及响应返回数据。模块内封装了传统http的GET、POST请求,可以像服务器一样处理网页请求,处理响应。当然如果你懂内网映射外网,开发app成为服务器也不是什么难事。举个例子,利用本模块开发类似APP【Airmore】:通过局域网打开网页控制app文件上传、下载、控制等等。更多的利用方式由开发者们自己构建利用场景了。【PS:因为自己团队APP利用本模块,所以会长期更新,[最新文档](http://www.cvvos.com)会最先更新在以下[demo](http://www.cvvos.com/httpServer/master.zip)。】
## [实例widget下载地址](http://www.cvvos.com/httpServer/master.zip)
#**论坛示例**
为帮助用户更好更快的使用模块,论坛维护了一个[示例](https://community.apicloud.com/bbs/thread-149382-1-1.html),示例中包含示例代码、知识点讲解、注意事项等,供您参考。
#**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对象
- 内部字段:
```js
{
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对象
- 内部字段:
```js
{
code: -1 //数字类型;
//错误码:
//-1(未知错误)
}
```
##示例代码
```js
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对象
- 内部字段:
```js
{
status: true //布尔型;true||false,关闭成功。
}
```
err:
- 类型:JSON对象
- 内部字段:
```js
{
code: -1 //数字类型;
//错误码:
//-1(未知错误)
}
```
##示例代码
```js
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对象
- 内部字段:
```js
{
ip:"192.168.0.128", //字符类型;目前只提供ipv4,手机开热点时返回手机热点IP,无任何网络返回null;
status: true //布尔型;true||false,IP获取成功。
}
```
err:
- 类型:JSON对象
- 内部字段:
```js
{
code: -1 //数字类型;
//错误码:
//-1(未知错误)
}
```
##示例代码
```js
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(安卓版:文件名是中文上传会被保存时重命名)
```js
{
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对象
- 内部字段:
```js
{
code: -1 //数字类型;
//错误码:
//-1(未知错误)
}
```
##示例代码
```js
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二选一不能同时使用,示例代码如下
```js
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对象
- 内部字段:
```js
{
status: true //布尔型;true||false,响应成功。
}
```
err:
- 类型:JSON对象
- 内部字段:
```js
{
code: -1 //数字类型;
//错误码:
//-1(未知错误)
}
```
##示例代码
```js
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()
##示例代码
```js
var httpServer = api.require('httpServer');
var ip=httpServer.ipSync(); //字符类型,目前只提供ipv4,手机开热点时返回手机热点IP,无任何网络返回null;
```
##可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
#**portSync**
同步获取端口;
portSync()
##示例代码
```js
var httpServer = api.require('httpServer');
var port=httpServer.portSync(); //字符类型,目前开启服务的端口号;
```
##可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
#**wwwSync**
同步获取当前提供访问的真实文件路径;
wwwSync()
```js
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();
##示例代码
```js
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
- 类型: 对象类型;需要响应给当次的所有自定义数据。
- 描述:(必填项)
##示例代码
```js
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及更高版本