关于Bmob

[Bmob](http://www.bmob.cn)
百度百科:
Bmob可以开发一个云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便浏览终端保存的各种信息。

Bmob特点
对于很多Android/ios/wp个人移动开发者来说,开发一个具有网络功能的应用不是一件
容易的事,不仅需要购买/租赁服务器,还必须掌握一门诸如Java/.net/php这类的服务
器开发语言,每开发一款移动应用程序,就必须开发维护对应的服务器程序。这一切对于
移动开发者来说,都是一个冗长的噩梦。
如何让移动开发者从繁琐的机械劳动中解脱出来,将更多精力投入到移动应用程序的创意
研发,从而不断提升产品质量呢?Bmob移动应用云存储平台的诞生就很好地解决了以上难
题。
在Bmob平台上,您只需注册一个帐号,成功后申请创建任意多个数据库,获得对应的
Key,下载对应版本的SDK并将其嵌入到移动应用中,便可以调用存取API,进行数据的任
意操作。有了Bmob,您在5分钟内就可以学会如何开发一个云存储的移动应用软件,给应
用软件快速添加一个安全灵活的后台管理系统,方便您浏览终端保存的各种信息。

开始使用

首先按照Bmob的文档申请账号,创建应用:
http://docs.bmob.cn/data/Android/a_faststart/doc/index.html

下面代码演示了使用Node.js查询并删除数据:
 var http = require('https');
var qs = require('querystring');
var deleteOptions = {           //删除请求的options
    "method": "DELETE",
    "hostname": "api.bmob.cn",
    "headers": {
        "x-bmob-application-id": "这里填写ApplicationId",
        "x-bmob-rest-api-key": "这里填写Rest-Api_key"
    }
};
var queryOptions={              //查询请求的options
    "method": "GET",
    "hostname": "api.bmob.cn",
    "headers": {
        "x-bmob-application-id": "这里填写ApplicationId",
        "x-bmob-rest-api-key": "这里填写Rest-Api_key",
        "content-type": "application/json",
    }
}
function query(tableName) {     //查询函数
    queryOptions.path="/1/classes/"+tableName   //拼接查询path
    var req = http.request(queryOptions, function (res) { //发起请求
        var chunks = [];
        res.setEncoding('utf8');
        res.on('data', function (chunk) {    //数据返回时回调
            chunks.push(chunk)      
        });
        res.on('end',function () {        //数据返回结束时回调
            var body="";
            for(i=0;i<chunks.length;i++){
                body=body+chunks[i]
            }
            var results=JSON.parse(body)
            var day15=1000*60*60*24*15
            for(j=0;j<results.results.length;j++){       
                var obj=results.results[j]
                var createdTime=new Date(obj.createdAt).getTime();
                var now=new Date().getTime();
                var liveTime=now-createdTime;
                if (liveTime>day15){          //时间检查,删除15天以前的记录
                    deleteRow(obj.objectId,tableName)
                }
            }
        })
    });
    req.on('error', function (e) {            //请求错误时回调
        console.log('problem with request: ' + e.message);
    });
    req.end();
}
function deleteRow(objectId,tableName){     //删除记录函数
    deleteOptions.path="/1/classes/"+tableName+"/"+objectId      //拼接删除path
    var req = http.request(deleteOptions, function (res) {      //发起DELETE请求
        var chunks = [];
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
            chunks.push(chunk)
        });
        res.on('end',function () {
            var body="";
            for(i=0;i<chunks.length;i++){
                body=body+chunks[i]
            }
            console.log(tableName+":"+objectId+"       "+body);
        })
    });
    req.on('error', function (e) {
        console.log('problem with request: ' + e.message);
    });
    req.end();
}
function start() {          //开始执行
    var tables=["TableName1","TableName2","TableName3"];  //需要删除记录的表名
    for(i=0;i<tables.length;i++){
        query(tables[i])
        console.log('start query:'+tables[i]);
    }
}
setInterval(start,6000);        //每分钟执行