mbaas-js-sdk-wechat v1.0.6
mbaas-js-sdk-wechat
Install
npm i mbaas-js-sdk-wechat
Usage
import MBaasSDK from '@aliyun/mbaas-js-sdk-xx'
MBaasSDK.init(config)
MBaasSDK.login({ username, password }, (error, res) => {
if (error) {
console.error(error)
return
}
MBaasSDK.db('foo').get(callbackFoo)
})
function callbackFoo(error, res) {
// ...
}API
初始化
MBaasSDK.init(config)
初始化 SDK。这个方法必须在初始化时调用。
This method must be called before any other calls on the SDK itself.
Arguments
config:SDKConfiganobjectwith keys below:appIdrequired小程序应用ID,从控制台获取secretrequired小程序应用秘钥,从控制台获取envIdrequired小程序应用环境ID,从控制台获取
DEMO
sdk.init({
"appId": 123456,
"secret": "this is your secret",
"envId": "test"
});MBaasSDK.login(callback)
登录接口,向控制台同步用户信息。
Arguments
callback:CallbackFunctionafunctionwith the arguments below:error:Error如果请求有错误,返回该错误;否则为空res:any返回请求结果
DEMO
sdk.login(function (err, res) {
if (err) {
console.error(err);
return;
}
// continue with res
});Tips
(@todo: tips -> CallbackFunction below)
云数据库
MBaasSDK.db(name): MBaasDatabase
Get a database manager
Arguments
name:string数据表名 / the name of the db you want to use
Returns: MBaasDatabase 数据表实例 / the database instance
当你获得一个数据表实例时,你可以调用以下属性或方法:
When you get the collection instance, you can access its members below:
MBaasDatabase#name
获取数据表名
Get the name of the db
Returns: string 数据表名 / the name of the db
DEMO
sdk.db('test').name
// print testMBaasDatabaseCollection#get(condition?, callback)
查询数据库
Query entries with a certain condition.
Arguments
condition?:Object(可选)查询条件 /Queryan object that describe the condition you want to querycallback: 回调函数 /CallbackFunctionerror:Error如果请求有错误,返回该错误;否则为空res:any返回请求结果
DEMO
// 不带查询条件的查询
sdk.db('test').get(function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { results: [{"objectId": 1, "name": "李四", "score": 40}, {"objectId": 2, "name": "张三", "score": 60}, {"objectId": 3, "name": "王五", "score": 98}] }
});查询条件
基本查询
在 Query 中使用 where 表示查询条件,以 keyvalue 的形式。
DEMO
// 带 where 的查询
sdk.db('test').get({
where: {"name": "李四"}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { results: [{"objectId": 1, "name": "李四"}]}
});除此之外,查询语句还支持以下更复杂的操作:
| 关键词 | 操作 |
|---|---|
| $lt | 少于 |
| $lte | 少于等于 |
| $gt | 多于 |
| $gte | 多于等于 |
| $ne | 不等于 |
| $in | 包含 |
| $nin | 不包含 |
| $exists | 存在某个字段 |
| $select | 符合子查询条件 |
| $dontSelect | 不符合子查询条件 |
| $all | 全部含有 |
| $regex | 某个字段的值符合相应的正则 |
| $text | 在有索引的字段上执行文字匹配 |
DEMO
// 返回分数大于等于1000,并小于等于3000的记录
sdk.db('test').get({
where: {"score": {"$gte": 1000, "$lte": 3000}}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { results: [{"objectId": 1, "score": 2083}]}
});
// 返回分数等于1,3,5,7,9的记录
sdk.db('test').get({
where: {"score": {"in": [1, 3, 5, 7, 9]}}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { results: [{"objectId": 1, "score": 2083}]}
});
// 返回名字不为 Jonathan Walsh,Dario Wunsch,Shawn Simon 的记录
sdk.db('test').get({
where: {"playerName": {
"nin": ["Jonathan Walsh", "Dario Wunsch", "Shawn Simon"]
}}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { results: [{"objectId": 1, "score": 2083}]}
});
// 返回有 score 字段的记录
sdk.db('test').get({
where: {"score": { "$exists": true }}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { results: [{"objectId": 1, "score": 2083}]}
});
// 返回含有符合子查询条件的记录
sdk.db('test').get({
where: {"hometown":{"$select":
{"query":{"className":"Team","where":{"winPct":{"$gt":0.5}}},"key":"city"}}
}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { results: [{"objectId": 1, "score": 2083}]}
});除了 where 语句,我们还有一些用于限制返回结果的属性:
| 字段 | 作用 |
|---|---|
| order | 排序 |
| limit | 限制每次返回数量 |
| skip | 起始间隔数量 |
| keys | 返回的记录字段 |
DEMO
// 返回以 score 字段升序排列的记录
sdk.db('test').get({
order: "score"
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
});
// 返回以 score 字段降序排列的记录
sdk.db('test').get({
order: "-score"
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
});
// 返回以 score 字段升序排列,name 降序排列的记录
sdk.db('test').get({
order: "score,-name"
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
});
// 返回从 401 开始的后续 200 条记录
sdk.db('test').get({
limit: 200,
skip: 400
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
});
// 返回只包含 score 和 playerName 的记录
sdk.db('test').get({
keys: "score,playerName"
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
});
// 组合起来使用
sdk.db('test').get({
where: {"playerName": {
"nin": ["Jonathan Walsh", "Dario Wunsch", "Shawn Simon"]
}},
order: "score,-name",
limit: 200,
skip: 400,
keys: "score,playerName"
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { results: [{"objectId": 1, "score": 2083}]}
});文本查询
使用 where 中 $regex 和 $text 可以实现文本查询。
其中 $text 的格式为: {"$text": {"$search": {parameter}}},参数名如下:
| 参数 | 作用 |
|---|---|
| $term | 定义搜索的文本(必须) |
| $language | Determines the list of stop words and the rules for tokenizer. |
| $caseSensitive | 是否开启大小写 |
| $diacriticSensitive | Enable or disable diacritic sensitive search |
DEMO
// 通过正则匹配查找
sdk.db('test).get({
where: {"name": {"$regex": "^Big Daddy"}}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
});
// 通过 text 进行更有效的查询
sdk.db('test).get({
where: {"name": {"$text": {"$search": {"$term": "Daddy"}}}}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
});查询总数
你可以通过 count 查询记录总数,可以通过设置 limit 为 0 避免记录的查询。
DEMO
sdk.db('test).get({
where: {"name": "good"},
count: 1,
limit: 0
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { "results": [], "count": 1000 }
});组合查询
你可以使用 $or 对查询条件进行组合。
DEMO
sdk.db('test).get({
where: {"or": [{"wins": {"$gt": 150}}, {"wins": {"lt": 5}}]}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { "results": [], "count": 1000 }
});唯一查询
使用 distinct 支持指定字段选取唯一值。
DEMO
sdk.db('test).get({
where: {"playerName": "Sean Plott"},
distinct: "score"
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { "results": [], "count": 1000 }
});聚合查询
使用 group 参数:$sum, $avg, $max, $min 对记录进行聚合操作,使用方法类似于 distinct。
DEMO
sdk.db('test).get({
group: {"objectId": null, "total": {"$sum": "$score"}}
}, function(err, res) {
if (err) {
console.error(err);
return;
}
console.log(res);
// print { "results": [], "count": 1000 }
});MBaasDatabase#add(entry, callback)
向数据库插入一条记录
Arguments
entry:Entry插入的记录callback:CallbackFunctionerror:Error如果请求有错误,返回该错误;否则为空res:any返回请求结果
DEMO
coll.add({
"score": 435, // type Number
"playerName": "Tim", // type String
"cheatMode": false, // type Boolean
"addr": null, // type Null
"birthday": { "__type": "Date", iso: "1995-01-01T00:00:00Z" }, // type Date
"habbits": ["swimming", "football"], // type Array
"parents": {
"father": "John",
"mother": "Marry"
} // type Object
}, (err, res) => {
if (err) {
console.error(err);
return;
}
console.log(res);
});Tips
请确保先在控制台创建好数据表,否则会失败。
MBaasDatabase#addMany(entries, callback)
向数据库插入多条记录
Arguments
entries:Array<Entry>插入的数据callback:CallbackFunctionerror:Error如果请求有错误,返回该错误;否则为空res:any返回请求结果,注意此处是数组,对应每条记录的状态
DEMO
coll.add([{
"score": 435, // type Number
"playerName": "Tim", // type String
"cheatMode": true, // type Boolean
}, {
"score": 100, // type Number
"playerName": "Sam", // type String
"cheatMode": false, // type Boolean
}], (err, res) => {
if (err) {
console.error(err);
return;
}
console.log(res);
});MBaasDatabase#updateById(entryId, entry, callback)
通过记录 ID 修改记录
Arguments
entryId:string记录的 objectIdentry:Entry修改内容callback:CallbackFunctionerror:Error如果请求有错误,返回该错误;否则为空res:any返回请求结果
DEMO
const coll = sdk.db('test')
coll.get({
where: { playerName: "Sean Plott" },
}, (err: any, res: any) => {
const id = res.results[0].objectId;
coll.updateById(id, { score: 0 }, (err: any, res: any) => {
});
});MBaasDatabase#deleteById(entryId, callback)
通过记录 ID 删除记录
Arguments
entryId:string记录的 objectIdcallback:CallbackFunctionerror:Error如果请求有错误,返回该错误;否则为空res:any返回请求结果
DEMO
const coll = sdk.db('test')
coll.get({
where: { playerName: "Sean Plott" },
}, (err: any, res: any) => {
const id = res.results[0].objectId;
coll.deleteById(id, (err: any, res: any) => {
});
});云存储
MBaasSDK.file(): MBaasFile
Get a file manager
Returns: MBaasDatabase the file manager
The file manager has two methods below:
MBaasFile#uploadFile(filepath, callback)
通过指定的文件路径上传一个文件
Arguments
filepath:string文件路径callback:CallbackFunctionerror:Error如果请求有错误,返回该错误;否则为空res:any返回请求结果
DEMO
const file = sdk.file();
file.uploadFile('./waiting.png', (err, res) => {
if (err) {
console.error(err);
return;
}
console.log(res);
});Tips
建议配合相关平台的文件选择使用
MBaasFile#deleteFile(entryId, callback)
通过指定的 ID 删除文件
Arguments
entryId:string文件记录IDcallback:CallbackFunctionerror:Error如果请求有错误,返回该错误;否则为空res:any返回请求结果
DEMO
const file = sdk.file();
file.deleteFile('1232324', (err, res) => {
if (err) {
console.error(err);
return;
}
console.log(res);
});MBaasFile#getTempUrl(entryId, callback)
通过指定的 ID 获取临时访问 url,有效期半天
Arguemtns
entryId:string文件记录IDcallback:CallbackFunctionerror:Error如果请求有错误,返回该错误;否则为空res:any返回请求结果
DEMO
const file = sdk.file();
file.getTempUrl('1232324', (err, res) => {
if (err) {
console.error(err);
return;
}
console.log(res.url);
});