
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
APICloud的 NODE SDK 是基于request构建. 它与APICloud开发的api进行交互,支持对象化操作,简化文件上传、多个文件上传、Relation相关操作,只需要在你的代码中做出一点点改变.
###新手上路
首先需要引入模块,需要使用那部分就引用各自的模块。
npm install apicloud
如果把相关代码添加到项目中,则直接引入即可。
var Resource=require("APICloud").Resource;
var Push=require("APICloud").Push;
var Analytics=require("APICloud").Analytics;
如果想要按照模块的方式使用,只需要把项目拷贝到node_modules里边即可,如修改文件夹名为APICloud
var Resource=require("APICloud").Resource;
var Push=require("APICloud").Push;
var Analytics=require("APICloud").Analytics;
然后需要配置进行调用的对象
var resouce = new Resource("appId", "appKey");
var push= new Push("appId", "appKey");
var analytics = new Analytics("appId", "appKey");
最后就可以调用需要使用的方法,进行后续操作了。
//具体参数参考推送文档
//{
// "title":"",
// "content":"",
// "type":1,
// "platform":0
//}
push.Message(jsonStr,function(ret,err){
});
//具体参数参考统计文档
analytics.getAppStatisticDataById("2015-05-22", "2015-05-28",function(ret,err){
});
//具体参数参考数据云文档
//modelName为class名称
var model=resouce.Factory(modelName);
model.Get(function(ret,err){
})
####数据api
Resource("appId", "appKey","url");
####参数
appId:
appKey:
url:
####示例代码
var client = new Resource("appId", "appKey");
###设置参数
.setHeaders("key", "value");
####参数
key:
value:
####示例代码
var client = new Resource("appId", "appKey");
client.setHeaders("authorization",'token');//注销以及ACL的时候需要设置authorization
###生成一个对象实例
.Factory("className");
####参数
className:
####示例代码
var client = new Resource("appId", "appKey");
var Model = client.Factory("modelName");
##rest基本操作
###增加
向对象插入一条数据 .save({body}, callback(ret,err))
####body
value:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.save({"username": username, "password": password,email:email}, function (ret,err) {
console.log("Model insert:"+JSON.stringify(ret))
console.log("Model insert:"+JSON.stringify(err))
});
###删除
根据ID删除对象的一条数据
.delete({params}, callback(ret, err))
####params
_id:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.delete({
"_id": "{{you id}}"
}, function (ret,err) {
console.log("aa all delete:"+JSON.stringify(ret));
});
###更新
根据ID更新对象的一条数据
.save({params},{body},callback(ret, err))
####params
id:
####body
value:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.save({"_id":id},{email:email,emailVerified:true},function(ret,err){
console.log("Model update:"+JSON.stringify(ret));
});
###根据id获取数据
根据ID查找对象的一条数据
.get({params}, callback(ret, err))
####params
_id:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.get({"_id": id}, function (ret,err) {
console.log("Model get:"+JSON.stringify(ret))
});
###查询所有数据
根据条件查找对象中所有符合条件的数据
.query({params}, callback(ret, err))
####params
filter:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.query(function (ret,err) {
console.log("Model query:"+JSON.stringify(ret))
});
###查询数据条数
根据条件返回对象下满足该条件的总记录数
.count({params}, callback(ret, err))
####params
filter:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.count(function (ret,err) {
console.log("Model count:"+JSON.stringify(ret))
});
###判断对象是否存在
查询某对象/对象下某行是否存在
.exists({params}, callback(ret, err))
####params
_id:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.exists(function (ret,err) {
console.log("Model exists:"+JSON.stringify(ret))
});
##rest文件操作
###文件上传
上传文件到云端file表里面
.save({body}, callback(ret, err))
####body
value
{
file: //文件对象名称,file表为file,file字段则为具体名称
{
isFile:true, //标示对象是一个文件对象
isFileClass:true,//标示当前是对file表进行操作,file表作为Relation表的时候必须
path:'', //文件地址
values:{}//自定义字段或者filename
}
};
####callback(ret, err)
ret:
err:
####示例代码
//对file表进行操作
var File = client.Factory("file");
api.getPicture({},function(ret,err){
File.save({file:{isFile:true,path:ret.data,values:{filename:"头像.png"}}},function(data,err){
alert("file:\t"+JSON.stringify(data));
alert("file:\t"+JSON.stringify(err));
})
})
//多文件上传,一个表有多个file字段
var bb = client.Factory("bb");
api.getPicture({},function(ret,err){
var path1=ret.data;
api.getPicture({},function(ret,err){
var path2=ret.data;
bb.save({file1:{isFile:true,path:path1},file2:{isFile:true,path:path2}},function(data,err){
alert(JSON.stringify(data));
})
});
})
//file表作为Relation表,isFileClass必须设置,否则无法上传
var RelationFile = client.Factory("relationFile");
api.getPicture({},function(ret,err){
RelationFile.save({"_id":"{{id}}","_relation":"{{relationName}}"},{file:{isFileClass:true,isFile:true,path:ret.data}},function(data,err){
alert("file:\t"+JSON.stringify(data));
alert("file:\t"+JSON.stringify(err));
})
})
##Relation相关操作
####概述 主要用于对一张表中数据类型为Relation的列进行操作
###增加
向对象的某关系列下插入一条内容
.save({params},{body}, callback(ret, err))
####params
_id:
_relation:
####body
value:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.save({"_id":"xxxxxxxxxxxxxx","_relation":"many"},{"username": username, "password": password,email:email}, function (ret,err) {
console.log("Model insert:"+JSON.stringify(ret))
console.log("Model insert:"+JSON.stringify(err))
});
###数据条数
查找对象某关系列下对应的数据总条数
.count({params}, callback(ret, err))
####params
_id:
_relation:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.count({"_id":"xxxxxxxxxxxxxx","_relation":"many"}, function (ret,err) {
console.log("Model count:"+JSON.stringify(ret))
console.log("Model count:"+JSON.stringify(err))
});
###获取
获取对象某关系列下对应的所有数据
.get({params}, callback(ret, err))
####params
id:
_relation:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.get({"_id":"xxxxxxxxxxxxxx","_relation":"many"}, function (ret,err) {
console.log("Model count:"+JSON.stringify(ret))
console.log("Model count:"+JSON.stringify(err))
});
###删除
删除对象某关系列下对应的所有数据
.delete({params}, callback(ret, err))
####params
id:
_relation:
####callback(ret, err)
ret:
err:
####示例代码
var Model = client.Factory("modelName");
Model.delete({"_id":"xxxxxxxxxxxxxx","_relation":"many"}, function (ret,err) {
console.log("Model count:"+JSON.stringify(ret))
console.log("Model count:"+JSON.stringify(err))
});
##用户相关
####概述 user对象提供用户独有操作,如登录、注销、发送重置密码邮件、发送验证邮件。
###login
登录
.login({params}, callback(ret, err))
####params
username:
password:
####callback(ret, err)
ret:
err:
####示例代码
var User = client.Factory("user");
User.login({username: username, password: password}, function (ret,err) {
console.log("user.login:"+JSON.stringify(ret))
console.log("user.login:"+JSON.stringify(err))
});
###logout
注销登录
.logout(callback(ret, err))
####callback(ret, err)
ret:
err:
####示例代码
//注销以及ACL的时候需要设置authorization
client.setHeaders("authorization",$api.getStorage('token'));
var User = client.Factory("user");
User.logout({token: token}, function (ret,err) {
console.log("user.logout:"+JSON.stringify(ret))
});
###verify
发送验证邮件
.verify({params}, callback(ret, err))
####params
email:
username:
language:
####callback(ret, err)
ret:
err:
####示例代码
var User = client.Factory("user");
User.verify({"email":email, "language":"zh_CN", "username":username},function(ret,err){
console.log("verify ret:\t"+JSON.stringify(ret))
})
###reset
发送重置密码邮件
.reset({params}, callback(ret, err))
####params
email:
username:
language:
####callback(ret, err)
ret:
err:
####示例代码
var User = client.Factory("user");
User.reset({"email":email, "language":"zh_CN", "username":username},function(ret,err){
console.log("reset ret:\t"+JSON.stringify(ret))
})
##查询参数
####示例代码
var Model = client.Factory("modelName");
Model.query({filter:{
where:{},
skip:0,
limit:10,
order:"id DESC",
include:"relation"
}}, function (ret,err) {
console.log("Model count:"+JSON.stringify(ret))
console.log("Model count:"+JSON.stringify(err))
});
fields、limit、order、skip、where、include、includefilter相关参数请参考云api文档
##批量查询
.batch(requests,callback(ret,err))
提示 batch为全局函数,即只能在Resouce对象上调用
示例
var client = new Resource("appId", "appKey");
client.batch()
####requests
示例
method为POST、PUT的时候需要在body内传值,为GET的时候不需要传递body path路径为相对路径
GET
{
"method": "GET",
"path": "/mcm/api/company",
}
POST
{
"method": "POST",
"path": "/mcm/api/company",
"body": {
"name": "apicloud",
"address": "北京市..."
}
}
####callback(ret, err)
ret:
err:
####示例代码
var requests=[
{
"method": "GET",
"path": "/mcm/api/company",
},
{
"method": "POST",
"path": "/mcm/api/company",
"body": {
"name": "apicloud",
"address": "北京市..."
}
}
]
client.batch(requests, function (ret,err) {
console.log("batch:"+JSON.stringify(ret))
console.log("batch:"+JSON.stringify(err))
});
返回ret结果为一个顺序数组
[
{
//request 1的结果
},
[
//request 2的结果
],
...
{
//request N的结果
}
]
####推送api
Message为Push下的函数,主要是是用来推送信息。
参数
返回值
示例
//{
// "title":"APICloud",
// "content":"",
// "type":1,
// "platform":0
//}
push.Message(jsonStr,function(ret,err){
});
####统计api
getAppStatisticDataById为Analytics下的函数,该接口主要用于获取用户指定应用ID及时间范围内的相关应用统计数据信息
参数
返回值
示例
Analytics.getAppStatisticDataById("2015-05-22", "2015-05-28",function(ret,err){
});
getVersionsStatisticDataById为Analytics下的函数,该接口主要用于获取用户指定应用ID及时间范围内相关应用各版本的统计数据信息
参数
返回值
示例
Analytics.getVersionsStatisticDataById("2015-05-22", "2015-05-28",function(ret,err){
});
getGeoStatisticDataById为Analytics下的函数,该接口主要用于获取用户指定应用ID及时间范围内的应用下各版本地理分布统计数据信息
参数
返回值
示例
Analytics.getGeoStatisticDataById("2015-05-22", "2015-05-28","",function(ret,err){
});
getDeviceStatisticDataById为Analytics下的函数,该接口主要用于获取用户指定应用ID及时间范围内的应用下各版本设备信息分布统计数据信息
参数
返回值
示例
Analytics.getDeviceStatisticDataById("2015-05-22", "2015-05-28",function(ret,err){
});
getExceptionsStatisticDataById为Analytics下的函数,该接口主要用于获取用户指定应用ID及时间范围内的应用下各版本异常错误统计数据信息
参数
返回值
示例
Analytics.getExceptionsStatisticDataById("2015-05-22", "2015-05-28",function(ret,err){
});
getExceptionsDetailByTitle为Analytics下的函数,该接口主要用于根据应用异常错误摘要获取异常错误详细信息
参数
返回值
示例
Analytics.getExceptionsDetailByTitle("2015-05-22", "2015-05-28",function(ret,err){
});
FAQs
APICloud SDK
The npm package apicloud receives a total of 0 weekly downloads. As such, apicloud popularity was classified as not popular.
We found that apicloud demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.