跳到主要内容

数据模型V2 API (Mongo环境)

$w.cloud.callDataSource

$w.cloud.callDataSource(params: ICallDataSourceParams): Promise<any>

功能描述

调用数据源,包括数据模型及 APIs

入参

params: ICallDataSourceParams

属性类型默认值必填说明
dataSourceNamestring数据源标识
methodNamestring数据源方法名
paramsobject方法参数,根据方法实际入参填写

如果数据源是数据模型,因为其方法皆由平台提供,其可用的数据源方法(methodName)是:

  • 新增:wedaCreateV2
  • 新增多条:wedaBatchCreateV2
  • 删除:wedaDeleteV2
  • 删除多条:wedaBatchDeleteV2
  • 更新:wedaUpdateV2
  • 更新多条:wedaBatchUpdateV2
  • 查询:wedaGetItemV2
  • 查询多条:wedaGetRecordsV2

方法入参结构及示例

示例数据源 sjmx_ftf41oj 包含 名为 name,类型为 string 的字段,包含名为 email,类型为 string 的字段

enter image description here

新增(wedaCreateV2)

入参结构

属性类型默认值示例必填说明
data{ [key: string]: any; }{name: "juli"}对应数据源的字段结构

出参结构

属性类型默认值示例必填说明
idstring "7L5G32U9PE"id 为对应创建数据源数据对应的标识
Idstring "7L5G32U9PE"Id 为对应创建数据源数据对应的标识(后续废弃

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaCreateV2",
params: {
data: {
email: "bar@weda.io",
name: "foo",
},
},
});
console.log("请求结果", data); // {"id": "f8f6930864c11bde006ff6c4662f9bf6"}
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

添加关联关系

现有数据模型 sjmx_ftf41oj(数据模型), glmx_b2z3oh7(关联模型)

如果试图在sjmx_ftf41oj模型中添加一条数据关联glmx_b2z3oh7中的一条数据,数据标识为62fd7a3664d1e8ba00cc579835a1ded2

enter image description here

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaCreateV2",
params: {
data: {
email: "bar@weda.io",
name: "foo",
relation: "62fd7a3664d1e8ba00cc579835a1ded2"
},
},
});
console.log("请求结果", data); // {"id": "f8f6930864c11bde006ff6c4662f9bf6"}
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

新增多条(wedaBatchCreateV2)

入参结构

属性类型默认值示例必填说明
data{ [key: string]: any }[][{name: "juli"}]不能为空数组, 传入空对象会被忽略

出参结构

属性类型默认值示例说明
idListidList: string[]["7L5G32U9PE"]idList 为对应创建数据源数据对应的标识列表
IdListIdList: string[]["7L5G32U9PE"]IdList 为对应创建数据源数据对应的标识列表(后续废弃)

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaBatchCreateV2",
params: {
data: [
{
email: "bar@weda.io",
name: "foo",
},
{
email: "juli@weda.io",
name: "juli",
},
],
},
});
console.log("请求结果", data); // {"idList": ["f8f6930864c11fee007010104a2589c4","f8f6930864c11fee0070101171d96063"]}
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

添加关联关系

现有数据模型 sjmx_ftf41oj(数据模型), glmx_b2z3oh7(关联模型)

如果试图在sjmx_ftf41oj模型中添加多条数据关联glmx_b2z3oh7中的多条数据,数据标识为 6243df, 76589xf 比如:foo关联6243df, juli关联76589xf

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaBatchCreateV2",
params: {
data: [
{
email: "bar@weda.io",
name: "foo",
relation: "6243df",
},
{
email: "juli@weda.io",
name: "juli",
relation: "76589xf",
},
],
},
});
console.log("请求结果", data); // {"idList": ["f8f6930864c11fee007010104a2589c4","f8f6930864c11fee0070101171d96063"]}
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

更新(wedaUpdateV2)

入参结构

属性类型默认值示例必填说明
data{ [key: string]: any; }{name: "juli"}对应数据源的字段结构
filter{ where: FilterObject}{filter: {where: {_id:{$eq:"foo"}}}}复杂查询结构

FilterObject 为复杂查询结构,请参考查询参数说明

该方法为单条更新方法,如果使用筛选条件,筛选得到多条数据,则不能用这个方法更新

出参结构

属性类型默认值示例说明
countcount: 0 or 11变更的条数,返回非 0 值代表更新成功。
CountCount: 0 or 11变更的条数,返回非 0 值代表更新成功。(后续废弃

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaUpdateV2",
params: {
// 更新数据
data: {
email: "zhangSan@weda.io",
},
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where: {
$and: [
{
_id: {
$eq: "4ebb756064c11bc9006e5d2e4f9b73a8", // 更新单条时,推荐传入_id数据标识进行操作
},
},
],
},
},
},
});
console.log("请求结果", data); // { count: 1 }
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

添加关联关系

现有数据模型 sjmx_ftf41oj(数据模型), glmx_b2z3oh7(关联模型)

如果试图在sjmx_ftf41oj模型中添加一条数据关联glmx_b2z3oh7中的一条数据,数据标识为62fd7a3664d1e8ba00cc579835a1ded2

enter image description here

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaUpdateV2",
params: {
// 更新数据
data: {
email: "zhangSan@weda.io",
relation: "62fd7a3664d1e8ba00cc579835a1ded2",
},
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where: {
$and: [
{
_id: {
$eq: "4ebb756064c11bc9006e5d2e4f9b73a8", // 更新单条时,推荐传入_id数据标识进行操作
},
},
],
},
},
},
});
console.log("请求结果", data); // { count: 1 }
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

更新多条(wedaBatchUpdateV2)

入参结构

属性类型默认值示例必填说明
data{ [key: string]: any; }{name: "juli"}对应数据源的字段结构
filter{ where: FilterObject}{filter: {where: {}}}复杂查询结构

FilterObject 为复杂查询结构,请参考查询参数说明

批量更新一次最多只能更新200条

出参结构

属性类型默认值示例说明
countcount: 0 or 11变更的条数,返回非 0 值代表更新成功
CountCount: 0 or 11变更的条数,返回非 0 值代表更新成功(后续废弃

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaBatchUpdateV2",
params: {
// 更新数据
data: {
email: "zhangSan@weda.io",
},
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where: {
$and: [
{
name: {
$eq: "juli",
},
},
],
},
},
},
});
console.log("请求结果", data); // { count: 3 }
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

添加关联关系

现有数据模型 sjmx_ftf41oj(数据模型), glmx_b2z3oh7(关联模型)

如果试图在sjmx_ftf41oj模型中添加一条数据关联glmx_b2z3oh7中的一条数据,数据标识为62fd7a3664d1e8ba00cc579835a1ded2

enter image description here

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaBatchUpdateV2",
params: {
// 更新数据
data: {
email: "zhangSan@weda.io",
relation: "62fd7a3664d1e8ba00cc579835a1ded2",
},
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where: {
$and: [
{
_id: {
$eq: "4ebb756064c11bc9006e5d2e4f9b73a8", // 更新单条时,推荐传入_id数据标识进行操作
},
},
],
},
},
},
});
console.log("请求结果", data); // { count: 1 }
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

删除(wedaDeleteV2)

入参结构

属性类型默认值示例必填说明
filter{ where: FilterObject }]{filter: {where: {}}}复杂查询结构

FilterObject 为复杂查询结构,请参考查询参数说明

数据源筛选条件满足条数为 1 以上进行时进行单条更新会出错

出参结构

属性类型默认值示例说明
countcount: 0 or 11变更的条数,返回非 0 值代表更新成功
CountCount: 0 or 11变更的条数,返回非 0 值代表更新成功(后续废弃

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaDeleteV2",
params: {
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where: {
$and: [
{
_id: {
$eq: "4ebb756064c11bc9006e5d2e4f9b73a8", // 更新单条时,推荐传入_id数据标识进行操作
},
},
],
},
},
},
});
console.log("请求结果", data); // { count: 1 }
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

删除多条(wedaBatchDeleteV2)

入参结构

属性类型默认值示例必填说明
filter{ where: FilterObject}{filter: {where: {}}}复杂查询结构

FilterObject 为复杂查询结构,请参考查询参数说明

批量删除一次最多只能删除200条

出参结构

属性类型默认值示例说明
countcount: 0 or 11变更的条数,返回非 0 值代表更新成功
CountCount: 0 or 11变更的条数,返回非 0 值代表更新成功(后续废弃

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaBatchDeleteV2",
params: {
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where: {
$and: [
{
name: {
$eq: "juli", // 更新单条时,推荐传入_id数据标识进行操作
},
},
],
},
},
},
});
console.log("请求结果", data); // { count: 3 }
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

查询(wedaGetItemV2)

入参结构

属性类型默认值示例必填说明
filter{ where: FilterObject}{filter: {where: {}}}复杂查询结构
select{ [key: string]: boolean }{ $master: true }可以指定返回本表或者关联表的字段,如果想查询本表所有字段,请使用 { $master: true }

FilterObject 为复杂查询结构,请参考查询参数说明

出参结构

属性类型默认值示例说明
对应数据源字段结构{ [key: string]: any }{ name: "juli" }返回满足筛选条件的数据源详情

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaGetItemV2",
params: {
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where: {
$and: [
{
_id: {
$eq: "f8f6930864c11fee007010104a2589c4", // 获取单条时,推荐传入_id数据标识进行操作
},
},
],
},
},
select: {
$master: true, // 常见的配置,返回主表
},
},
});
console.log("请求结果", data); // "{"owner":"1559148626461061122","createdAt":1690378222467,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"foo","_id":"f8f6930864c11fee007010104a2589c4","email":"bar@weda.io","updatedAt":1690378222467}"
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

查询多条(wedaGetRecordsV2)

入参结构

属性类型默认值必填说明
filter{ where: FilterObject}复杂查询结构
select{ [key: string]: boolean }{ $master: true } 可以指定返回本表或者关联表的字段,如果想查询本表所有字段,请使用 { $master: true }
getCountbooleanfalse获取 filter 命中条件的查询条数
pageSizenumber10分页大小,建议指定,如需设置为其它值,需要和pageNo配合使用,两者同时指定才会生效
pageNumbernumber1分页数目
orderBy{[key: string]: "acs" "desc" }[]排序,当前仅支持最多 3 字段排序
compatibleWithV1booleanfalse对旧关联关系的兼容,下面详细介绍
relateWhere支持对数据模型对关联表进行查询

请不要依赖协议中任何的默认值。

对于orderBy的排序,在默认情况下以底层数据库查询结果为准,不存在新建数据一定会排在最前的情况。

查询请求单次最大仅支持200条

如何获取新创建的第一条数据

设置排序条件为创建时间字段降序排序,每页条数为1,页码为1,终查询结果中,取records[0]中的数据

出参结构

属性类型默认值示例说明
records{ [key: string]: any }[]{ name: "juli" }records 内的数组为对应的数据源数据对象
totalnumber1入参配置了 getCounttrue 时会返回满足筛选查询条件的大小,注意,此字段不代表返回 records 的长度,可以用作页面大小的计算。当getCountfalse的时候,不应该对此值做任何期待

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaGetRecordsV2",
params: {
// 排序
orderBy: [
{
createdAt: "desc", // 创建时间,倒序
},
],
// 返回total字段
getCount: true,
// 页面大小
pageSize: 1,
// 当前页面
pageNumber: 1,
},
});
console.log("请求结果", data); // "{"records":[{"owner":"1559148626461061122","createdAt":1690378222467,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"foo","_id":"f8f6930864c11fee007010104a2589c4","email":"bar@weda.io","updatedAt":1690378222467}],"total":1}"
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

select详解

select 主要用来帮助手动筛选字段。通过设置select,可以对筛选的结果进行选择。

假设存在主模型 student 有字段 _idnameagerelateSchool(旧关联关系)

假设存在关联模型 school 有字段 _idschool_nameschool_address

主模型 student 通过关联字段 relateSchool 和 关联模型 school建立关联。即relateSchool 字段 存取了 school表某条数据的_id值。

解释说明:

因为一些内部调整原因。将关联关系字段和主子明细字段作为 关联关系(旧)字段。其返回关联数据的方式通过特殊前缀@的方式进行返回。

对于新关联关系,则是以关联关系字段本身作为返回。

筛选主模型(当前模型)字段。

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "student",
methodName: "wedaGetRecordsV2",
params: {
// 返回字段选择
select: {
name: true,
age: true
},
// 返回total字段
getCount: true,
// 页面大小
pageSize: 10,
// 当前页面
pageNumber: 1,
},
});
console.log("请求结果", data);
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

筛选关联模型字段,筛选旧关联关系。

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "student",
methodName: "wedaGetRecordsV2",
params: {
// 返回字段选择
select: {
name: true,
age: true,
relateSchool: true
},
// 返回total字段
getCount: true,
// 页面大小
pageSize: 10,
// 当前页面
pageNumber: 1,
},
});
console.log("请求结果", data);
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

此时只会返回关联的school表中_id值。

如果想返回更多的关联数据。

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "student",
methodName: "wedaGetRecordsV2",
params: {
// 返回字段选择
select: {
name: true,
age: true,
relateSchool: true
},
// 返回total字段
getCount: true,
// 页面大小
pageSize: 10,
// 当前页面
pageNumber: 1,
// 是否兼容V1协议
compatibleWithV1: true,
},
});
console.log("请求结果", data);
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

示例返回值如下

{
"records":[
{
"relateSchool":"7EZPN3F128",
"name":"xiaoming",
"_id":"7EZPN3F3ZS",
"age":12,
"@relateSchool":{
"v1":{
"primaryColumn":"name",
"record":{
"_id": "7EZPN3F128",
"school_name":"WeDa小学",
"school_address": "西红市光明路"
}
}
}
}
],
"total":3
}

compatibleWithV1详解

本开关用于返回对关联关系(旧)的关联数据返回,并以@ 符号返回 示例返回值如下

{
"records":[
{
"relateSchool":"7EZPN3F128",
"name":"xiaoming",
"_id":"7EZPN3F3ZS",
"age":12,
"@relateSchool":{
"v1":{
"primaryColumn":"name",
"record":{
"_id": "7EZPN3F128",
"school_name":"WeDa小学",
"school_address": "西红市光明路"
}
}
}
}
],
"total":3
}

如果设置为compatibleWithV1:false后。

{
"records":[
{
"relateSchool":"7EZPN3F128",
"name":"xiaoming",
"_id":"7EZPN3F3ZS",
"age":12
}
],
"total":3
}

将不会返回额外的关联字段。

解释说明:

因为一些内部调整原因。将关联关系字段和主子明细字段作为 关联关系(旧)字段。其返回关联数据的方式通过特殊前缀@的方式进行返回。

出参结构

属性类型默认值示例说明
records{ [key: string]: any }[]{ name: "juli" }records 内的数组为对应的数据源数据对象
totalnumber3入参配置了 getCounttrue 时会返回满足筛选查询条件的大小,注意,此字段不代表返回 records 的长度,可以用作页面大小的计算。当getCountfalse的时候,不应该对此值做任何期待

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaGetRecordsV2",
params: {
// 筛选内容,当前筛选的含义为:名字为 "juli" 或者 "foo"
filter: {
where: {
$or: [
{
name: {
$eq: "juli",
},
},
{
name: {
$eq: "foo",
},
},
],
},
},
// 排序
orderBy: [
{
createdAt: "asc", // 创建时间,正序
},
{
updateBy: "desc", // 更新时间,倒序
},
],
// 返回字段选择
select: {
$master: true, // 常见的配置,返回主表
},
// 返回total字段
getCount: true,
// 页面大小
pageSize: 10,
// 当前页面
pageNumber: 1,
},
});
console.log("请求结果", data); // "{"records":[{"owner":"1559148626461061122","createdAt":1690378222467,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"foo","_id":"f8f6930864c11fee007010104a2589c4","email":"bar@weda.io","updatedAt":1690378222467},{"owner":"1559148626461061122","createdAt":1690382002594,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"juli","_id":"f95d024c64c12eb2006fd51d38654e28","email":"juli@weda.io","updatedAt":1690382002594}],"total":2}"
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

relateWhere 详解

relateWhere 主要用来帮助进行方便的关联查询。通过设置relateWhere,可以对关联表添加筛选条件。

示例

relateWherefilter中的where查询结构本质相同。

new_glgx 为本表的关联字段

{
"where":{

},
"relateWhere":{
"new_glgx":{
"where":{
"$and":[
{
"name":{
"$eq":"1"
}
}
]
}
}
}
}

编辑器 Javascript 代码示例

export default async function ({event, data}) {
try {
const data = await $w.cloud.callDataSource({
dataSourceName: "sjmx_ftf41oj",
methodName: "wedaGetRecordsV2",
params: {
// 筛选内容,当前筛选的含义为:名字为 "juli" 或者 "foo"
filter: {
"where":{
},
"relateWhere":{
"new_glgx":{ // sjmx_ftf41oj 的关联字段
"where":{
"$and":[
{
"name":{ // 关联表中的字段
"$eq":"1"
}
}
]
}
}
}
},
// 返回字段选择
select: {
$master: true, // 常见的配置,返回主表
},
// 返回total字段
getCount: true,
// 页面大小
pageSize: 10,
// 当前页面
pageNumber: 1,
},
});
console.log("请求结果", data); // "{"records":[{"owner":"1559148626461061122","createdAt":1690378222467,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"foo","_id":"f8f6930864c11fee007010104a2589c4","email":"bar@weda.io","updatedAt":1690378222467},{"owner":"1559148626461061122","createdAt":1690382002594,"createBy":"1559148626461061122","updateBy":"1559148626461061122","name":"juli","_id":"f95d024c64c12eb2006fd51d38654e28","email":"juli@weda.io","updatedAt":1690382002594}],"total":2}"
} catch (e) {
console.log("错误代码", e.code, "错误信息", e.message);
}
}

查询参数说明

逻辑运算符

名称描述
$and使用逻辑 and 连接字段,返回与这两个字段条件匹配的数据
$or使用逻辑 or 连接字段,返回与任一个字段条件匹配的数据

示例 1

{
"$and": [
{
"key": {
"$eq": "val"
}
}
]
}

示例 2

{
"$or": [
{
"$and": [
{
"key": {
"$eq": "val"
}
},
{
"key2": {
"$neq": 3
}
}
]
},
{
"key3": {
"$eq": 0
}
}
]
}

比较运算符

名称描述适用类型
$eq匹配等于指定值的值字符串,布尔值,数字
$neq匹配所有不等于指定值的值字符串,布尔值,数字
$gt匹配大于指定值的值数字
$gte匹配大于或等于指定值的值数字
$lt匹配小于指定值的值数字
$lte匹配小于或等于指定值的值数字
$in匹配数组中指定的任何值数组
$nin不匹配数组中指定的任何值数组

示例 1

{
"$and": [
{
"key": {
"$eq": "val"
}
}
]
}

示例 2

{
"$and": [
{
"key1": {
"$in": [
"foo",
"bar"
]
}
},
{
"key2": {
"$in": [
1,
2
]
}
}
]
}

特殊运算符

名称描述适用类型说明
$search模糊查询字符串性能较差,尽量避免使用
$nsearch不包含,会把 null 值查找出来字符串性能较差,尽量避免使用
$eq-current-user等于当前用户字符串
$ne-current-user不等于当前用户字符串
$empty数据为 null任意类型
$nempty数据不为 null任意类型

$empty,$nempty 在 mongo 中,会查询字段不存在和字段值为 null 的两种情况。

示例1.1

{
"$and": [
{
"key": {
"$search": "val"
}
}
]
}

示例1.2

{
"$and": [
{
"key": {
"$nsearch": "val"
}
}
]
}

示例2.1

{
"$and": [
{
"key": {
"eq-current-user": "val"
}
}
]
}

示例2.2

{
"$and": [
{
"key": {
"ne-current-user": "val"
}
}
]
}

示例3.1

{
"$and": [
{
"key": {
"$empty": 1
}
}
]
}

示例3.2

{
"$and": [
{
"key": {
"$nempty": 1
}
}
]
}

FAQ

1. 标识[xxx] 必填参数未填

xxx 字段被设置未必填属性时,如果参数的值没取到,就会出现这个错误。一般在返回的错误里有errRecord字段。比如errRecord:{"foo":"bar"} 。 可以看到比如errRecord中不存在xxx字段。所以必填校验失败。

2. 通过编辑器和APIS调用有什么区别

使用和管理自定义 API