快速搭建服务端项目

简介

使用 TypeScriptES6 编写项目的业务代码,供前端和管理后台调用,您只需在此建立数据表和编写业务逻辑,并配合 mobox 客户端发布到线上,让您的代码直接在 mobox 云上运行,使得新功能的发布变得更加简单可控,从而达到免服务器搭建、免域名备案、免接口开发、免线上运维的效果。

环境配置

mobox后端云已将所有需要的环境都集成在云端,开发者不需要单独配置环境,只需专注于业务逻辑的编写。

框架目录结构

  • 建议使用 VisualStudioCode 为编码 IDE,并确认安装插件 VeturESLintPrettier
  • 打开您在 mobox 客户端创建的项目。
test-api
├─ src
|  ├─ interfaces    // 枚举文件,若无此文件夹请自行创建
|  ├─ models        // 数据结构文件,若无此文件夹请自行创建
|  ├─ services          // 业务代码 ,若无此文件夹请自行创建
│  └─ index.ts      // 入口文件不可删除
├─ types
├─  └─ helper.d.ts  // 帮助文件不可删除
├─ tsconfig.json    // 系统文件不可删除
├─ tslint.json      // 系统文件不可删除
├─ package.json     // 系统文件不可删除,配置了项目名称、项目所在 `mobox` 服务的 ID 以及项目版本号
└─ README.md        // 说明文件

创建数据表

在 models 文件夹下新建一个 ts 文件,示例如下:

import Gender from "../interfaces/Gender";
@Timestamp
export default class Student extends Table<Student> {
  @Col
  @OldKey('studentName')
  @Unique public name: string;

  @Col
  public avatarUrl: string;

  @Col
  @Default(Gender.Male)
  public sex: string;

  @Col
  public age: number;

  @Col
  public interests: string;

  @Col
  public professionId: number;

  @Col
  public classroomId: string;

}

此示例创建了一张学生表,需继承 Table 父类,类名和表名命名需遵守大驼峰规则。示例中的 @Col、@Default、@Unique 和 @OldKey 是属性装饰器,@Timestamp 是类装饰器

构建业务代码

在 services 文件夹下新建 ts 文件,举例如下:

import Model from '../models/student';
export default class Student extends Mod {
  @Api({
    params: {
      name: 'string',
      sex: 'string',
      age: 'number?',
      interests: 'string',
      professionId: 'number?'
    },
    token: true,
  })
  public async set({ name, sex, age, interests, professionId }: Context) {
      const res = await Model.create({ name, sex, age, interests, professionId });
  }

  @Api({
    params: {
      sex: 'string?',
      age: 'number?',
      interests: 'string',
      professionId: 'number?'
    },
    token: true
    db: true
  })
  public async update({ token: { id }, sex, age, interests, professionId , $db}: Context) {
    try {
      Model.with($db).startTrans(); // 插入回滚起点
      return Model.where({ id }).with($db).update({ name: '张三', sex, age, interests, professionId });
      Model.with($db).endTrans(); //  // 插入回滚终点
    } catch (e) {
      Model.with($db).backTrans(); // 捕获异常 回滚
      throw new Error('新建学生数据异常!');
    }
  }

  @Api({
    params: {
      name: 'string?'
    },
    token: true
  })
  public async get({ name }: Context) {
    return Model.where({ name }).fields('id', 'name', 'age').findOne();
  }

  @Api({
    params: {
      page: 'number',
      limit: 'number'
    },
    token: true
  })
  public async getList({ page, limit }: Context) {
    return Model.where().offset((page - 1) * limit).limit(limit).order({ id: 'DESC' }).findAll();
  }
}
  • 此示例关于学生表的业务,需继承 Mod 父类,类名命名需遵守大驼峰规则。
  • @Api 是函数装饰器,表示此方法是可被外界访问的接口。
  • token 签名,包含了用户信息,起到校验合法请求、提升系统安全性的作用,签名是通过云函数进行获取的。
  • Context: 获取上下文参数。
  • with、create、where、update、offset、limit 等是系统CURD 的内置语法糖
  • 更多系统变量、参数、和方法请参考 types/help.d.ts文件。
  • :函数名不要使用关键词命名

常用云函数

微信开放接口

login 微信登录

  • 请求格式:JSON
  • 请求参数:code:string 必传 微信开放接口返回的临时登录凭证
    参数名 类型 必选 说明
    code string Yes 临时登录凭证 code
  • 返回格式:JSON
  • 请求示例:
import Model from '../models/users';
const config = {
  appId: '小程序id',
  secret: '密钥'
}
export default class User extends Mod {
  @Api({
    params: {
      code: 'string'
    }
  })
  public async mpLogin({ code }: Context) {
    const res = await Cloud.Mp.from(config).login({ code }); // 微信登陆
    let user: any = await Model.where({ openId: res.openid }).findOne();
    if (!user) {
      user = await Model.create({ openId: res.openid });
      return SignToken(user.id, { exp: 3600 * 12, role: user.role });
    }
    return SignToken(user.id, { exp: 3600 * 12, role: user.role,sessionKey:res.session_key }); // 获取token
  }
}

decryptData 微信解密,获取用户信息

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    sessionKey string Yes 微信小程序登录时获取的 sessionKey
    encryptedData string Yes 微信小程序接口返回的加密数据
    iv string Yes 微信小程序接口返回的 iv
  • 返回格式:JSON
  • 请求示例:
import Model from '../models/users';
const config = {
  appId: '小程序id',
  secret: '密钥'
}
export default class User extends Mod {
  @Api({
    params: {
      encryptedData: 'string', // 需要解密的数据
      iv: 'string', // 加密算法的初始向量
    },
    token: true
  })
  public async updateMobile({ encryptedData, iv, token: { id, sessionKey } }: Context) {
    const { phoneNumber } = await Cloud.Mp.from(config).decryptData({ sessionKey, encryptedData, iv }); // 解密
    return Users.where({ id }).update({
      mobile: phoneNumber,
      updatedAt: new Date()
    });
  }
}

getAccessToken 获取 微信 accessToken

  • 请求格式:JSON
  • 请求参数:--
  • 返回格式:JSON
  • 请求示例:
import Model from '../models/users';
const config = {
  appId: '小程序id',
  secret: '密钥'
}
export default class User extends Mod {
  @Api()
  public async getAccessToken() {
    return Cloud.Mp.from(config).getAccessToken();
  }
}

getQrCode 获取微信小程序码

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    page string Yes 微信小程序页面路径
    scene string Yes 场景值
    is_hyaline boolean No 是否生成透明背景二维码
    auto_color boolean No 自动配置线条颜色
    line_color object No auto_color 为 false 时生效,使用 rgb 设置颜色
    width number No 二维码的宽度
  • 返回格式:JSON
  • 请求示例:
import Model from '../models/users';
const config = {
  appId: '小程序id',
  secret: '密钥'
}
export default class User extends Mod {
   @Api({
    params:{
      page:'string', // 微信小程序页面路径
      scene:'string' // 场景值
    }
  })
  public async getQrCode({page,scene}:Context) {
    return Cloud.Mp.from(config).getQrCode({ page, scene });
  }
}

sendTemplateMessage 发送微信消息

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    openId string Yes 消息接收人微信标识
    templateId string Yes 模版 id
    page string Yes 点击模板消息进入小程序的页面路径
    data object Yes 模板消息发送内容
  • 返回格式:JSON
  • 请求示例:
import Model from '../models/users';
const config = {
  appId: '小程序id',
  secret: '密钥'
}
export default class User extends Mod {
  @Api({ token: true })
  public async sendTemplateMessage({ token: { id } }: Context) {
    const user: any = await Model.where({ id }).findOne();
    // 消息推送
    const page = `pages/order/orderDetail?id=${id}`;
    const dat = {
      character_string1: {
        value: 'No20201030',
      },
      thing2: {
        value: user.nickName,
      },
      phrase4: {
        value: '订单被驳回',
      }
    };
    const templateId = '模版id';
    return Cloud.Mp.from(config).sendTemplateMessage({ openId: user.openId, templateId, page, data: dat });
  }
}

getPayParams 获取微信预支付参数

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    appId string Yes 微信小程序 appId
    mchId string Yes 商户号 id
    partnerKey string Yes 微信支付密钥
    pfx string No 证书格式
    notifyUrl string No 微信支付回调地址
    refundUrl string No 微信申请退款回调地址
    spBillCreateIp string No 终端 IP
    sandbox boolean No 是否扫码支付
  • 返回格式:JSON
  • 请求示例:
import Users from '../models/users';
import Orders from '../models/orders';
const config = {
  appId: '小程序appid',
  mchId: '商户号',
  partnerKey: '支付密钥'
};
export default class Pay extends Mod {
 @Api({
    params: {
      ordersId: 'number?',
    },
    token: true
  })
  public async pay({ ordersId, token: { id: userId } }: Context) {
    const [orders, user]: any = await Promise.all([
      Orders.where({ id: ordersId }).findOne(),
      Users.where({ id: userId }).findOne()
    ]);
    return Cloud.Payment.from({ ...config }).getPayParams({
      outTradeNo: orders.no!,
      body: '酒店服务'!,
      totalFee: '1'! || (Number(orders.fee) * 100)!.toString(), // 微信支付单位为分
      openId: user.openId,
      notifyUrl: `回调函数地址`
    });
  }
}

orderQuery 查询微信订单

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    outTradeNo string Yes 商户系统内部订单号
    signType 'MD5' No 默认为 MD5, 证书格式
    transactionId string No 微信支付订单号
  • 返回格式:JSON
  • 请求示例:
import Orders from '../models/orders';
const config = {
  appId: '小程序appid',
  mchId: '商户号',
  partnerKey: '支付密钥'
};
export default class Pay extends Mod {
  @Api({
    params: {
      orderId: 'number'
    },
    token: true
  })
  public async orderQuery({ orderId }: Context) {
    const orders: any = await Orders.where({ id: orderId }).findOne();
    return Cloud.Payment.from(config).orderQuery({
      outTradeNo: orders.no,
    });
  }
}

closeOrder 关闭微信订单

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    outTradeNo string Yes 商户系统内部订单号
    signType 'MD5' No 默认为 MD5, 证书格式
    transactionId string No 微信支付订单号
  • 返回格式:JSON
  • 请求示例:
import Orders from '../models/orders';
const config = {
  appId: '小程序appid',
  mchId: '商户号',
  partnerKey: '支付密钥'
};
export default class Pay extends Mod {
  @Api({
    params: {
      orderId: 'number'
    },
    token: true
  })
  public async closeOrder({ orderId }: Context) {
    const orders: any = await Orders.where({ id: orderId }).findOne();
    return Cloud.Payment.from(config).closeOrder({
      outTradeNo: orders.no,
    });
  }
}

refund 申请微信退款

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    outTradeNo string Yes 商户系统内部已支付的订单号
    outRefundNo string Yes 商户系统内部的退款单号
    totalFee string Yes 已经付的订单金额
    refundFee string Yes 微信退款的金额
    notifyUrl string Yes 回调地址
    transactionId string No 微信支付订单号
    signType 'MD5' No 默认为 MD5,证书格式
    refundDesc string No 退款原因
  • 返回格式:JSON
  • 请求示例:
import Orders from '../models/orders';
const config = {
  appId: '小程序appid',
  mchId: '商户号',
  partnerKey: '支付密钥'
};
export default class Pay extends Mod {
   @Api({
    params: {
      orderId: 'number'
    },
    token: true
  })
  public async refund({ orderId }: Context) {
    const orders: any = await Orders.where({ id: orderId }).findOne();
    const outRefundNo='xxx';
    return Cloud.Payment.from(config).refund({
      outTradeNo: orders.no,
      outRefundNo,
      totalFee: orders.fee,
      refundFee: orders.fee,
      notifyUrl: '回调函数地址'
    });
  }
}

refundQuery 查询微信退款

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    outTradeNo string Yes 商户系统内部订单号
    refundId string No 微信生成的退款单号
    signType 'MD5' No 默认为 MD5,证书格式
  • 返回格式:JSON
  • 请求示例:
import Orders from '../models/orders';
const config = {
  appId: '小程序appid',
  mchId: '商户号',
  partnerKey: '支付密钥'
};
export default class Pay extends Mod {
  @Api({
    params: {
      orderId: 'number'
    },
    token: true
  })
  public async refundQuery({ orderId }: Context) {
    const orders: any = await Orders.where({ id: orderId }).findOne();
    return Cloud.Payment.from(config).refundQuery({
      outTradeNo: orders.no,
    });
  }
}

transfers 企业微信付款

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    partnerTradeNo string Yes 商户订单号
    openId string No 用户微信标识
    amount number Yes 企业付款金额
    desc string Yes 企业付款备注
    checkName 'FORCE_CHECK' No 默认为 FORCE_CHECK,校验用户姓名选项
    reUseName string No 收款用户姓名
    spBillCreateIp string No Ip 地址
  • 返回格式:JSON
  • 请求示例:
import Orders from '../models/orders';
const config = {
  appId: '小程序appid',
  mchId: '商户号',
  partnerKey: '支付密钥'
};
export default class Pay extends Mod {
 @Api({
    params: {
      orderId: 'number'
    },
    token: true
  })
  public async transfers({ orderId }: Context) {
    const orders: any = await Orders.where({ id: orderId }).findOne();
    const user: any = await Users.where({ id: orders.userId }).findOne();
    return Cloud.Payment.from(config).transfers({
      partnerTradeNo: orders.no,
      openId: user.openId,
      amount: orders.fee,
      desc: '企业付款到用户'+user.nickName,
    });
  }
}

transfersQuery 查询企业微信付款

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    partnerTradeNo string Yes 商户订单号
  • 返回格式:JSON
  • 请求示例:
import Orders from '../models/orders';
const config = {
  appId: '小程序appid',
  mchId: '商户号',
  partnerKey: '支付密钥'
};
export default class Pay extends Mod {
  @Api({
    params: {
      orderId: 'number'
    },
    token: true
  })
  public async transfersQuery({ orderId }: Context) {
    const orders: any = await Orders.where({ id: orderId }).findOne();
    return Cloud.Payment.from(config).transfersQuery({
      partnerTradeNo: orders.no,
    });
  }
}

sendRedPack 微信商户发放红包接口

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    mchBillNo string Yes 商户订单号
    sendName string Yes 商户名称
    actName string Yes 活动名称
    reOpenId string Yes 用户 openid
    totalAmout number Yes 付款金额,单位分
    totalNum number Yes 红包发放总人数
    wishing string Yes 红包祝福语
    remark string Yes 备注
    sceneId 'PRODUCT_1'|'PRODUCT_2'| 'PRODUCT_3'|'PRODUCT_4'| 'PRODUCT_5'|'PRODUCT_6'| 'PRODUCT_7'|'PRODUCT_8' No 场景 id(1:商品促销;2:抽奖;3:虚拟物品兑奖;4:企业内部福利;5:渠道分润;6:保险回馈;7:彩票派奖;8:税务刮奖)
    spBillCreateIp string Yes 终端 IP
  • 返回格式:JSON
  • 请求示例:
import Users from '../models/orders';
const config = {
  appId: '小程序appid',
  mchId: '商户号',
  partnerKey: '支付密钥'
};
export default class Pay extends Mod {
   @Api({
    params: {
      id: 'number'
    }
  })
  public async sendRedPack({ id }: Context) {
    const user: any = await Users.where({ id }).findOne();
    return Cloud.Payment.from(config).sendRedPack({
      mchBillNo: '10000098201411111234567890',
      sendName: '墨客云科技',
      reOpenId: user.openId,
      totalAmout: 100 * 100,
      actName: '参与竞猜奖励',
      wishing: '墨客云科技祝您生活愉快!',
      remark: '猜越多得越多,快来抢!',
      sceneId: 'PRODUCT_8',
      spBillCreateIp: '192.168.0.1',
      totalNum: 10
    });
  }
}

sendGroupRedPack 微信商户发放裂变红包

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    mchBillNo string Yes 商户订单号
    sendName string Yes 商户名称
    actName string Yes 活动名称
    reOpenId string Yes 用户 openid
    totalAmout number Yes 付款金额,单位分
    totalNum number Yes 红包发放总人数
    wishing string Yes 红包祝福语
    remark string Yes 备注
    sceneId 'PRODUCT_1'|'PRODUCT_2'| 'PRODUCT_3'|'PRODUCT_4'| 'PRODUCT_5'|'PRODUCT_6'| 'PRODUCT_7'|'PRODUCT_8' No 场景 id(1:商品促销;2:抽奖;3:虚拟物品兑奖;4:企业内部福利;5:渠道分润;6:保险回馈;7:彩票派奖;8:税务刮奖)
    spBillCreateIp string Yes 终端 IP
  • 返回格式:JSON
  • 请求示例:请参考sendRedPack函数
  • 接口备注:详情请查看微信开发文档

redPackQuery 查询红包记录

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    mchBillNo string Yes 商户订单号
  • 返回格式:JSON
  • 请求示例:
const config = {
  appId: '小程序appid',
  mchId: '商户号',
  partnerKey: '支付密钥'
};
export default class Pay extends Mod {
   @Api({
    params: {
      mchBillNo: 'string'
    }
  })
  public async redPackQuery({ mchBillNo }: Context) {
    return Cloud.Payment.from(config).redPackQuery({
      mchBillNo,
    });
  }
}

发送短信

send 发送短信

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    mobile string Yes 收件人手机号
    msg string Yes 发送的消息内容
  • 返回格式:JSON
  • 请求示例:
import users from '../models/users';
export default class User extends Mod {
  @Api({token:true})
  public async transfersQuery({ token:{id} }: Context) {
    const user: any = await Users.where({ id }).findOne();
    return Cloud.Sms.from({ account:'账号' , password: '密码', url: '短信服务地址' })
      .send({ mobile: telephone, msg: '发送成功!' });
  }
}

全局函数

getQiniuToken 获取七牛云上传参数 uptoken

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    accessKey string Yes 七牛云 key
    secretKey string Yes 七牛云密钥
    bucket string Yes 上传到七牛云的空间名
  • 返回格式:string
  • 请求示例:
import users from '../models/users';
export default class User extends Mod {
 @Api({token: true})
  public async getQiniuToken() {
    const accessKey = '七牛云key';
    const secretKey = '七牛云密钥';
    const bucket = '空间名';
    return getQiniuToken({ accessKey, secretKey, bucket });
  }
}

SetRouteConfig 生成教育版管理后台

  • 请求格式:JSON
  • 请求参数:
    参数名 类型 必选 说明
    table Object Yes 后台管理页面表单配置
    route array Yes 后台管理页面路由配置
  • 返回格式:--
  • 请求示例:
import UserRoles from './interfaces/userRoles'
SetRouteConfig({
  route: [
    {
      path: '/users',
      meta: { title: '用户管理', icon: 'el-icon-user-solid' },
      children: [
        {
          path: 'users',
          meta: { title: '用户管理', config: 'users' },
        },
      ],
    },
    {
      path: '/orders',
      meta: { title: '订单管理', icon: 'el-icon-s-order' },
      children: [
        {
          path: 'orders',
          meta: { title: '订单管理', config: 'orders' },
        },
      ],
    },
  ],
  table: {
    users: {
      table: 'Users',
      columns: [
        {
          key: 'openId',
          title: '微信标识',
          search: true,
        },
        {
          key: 'avatarUrl',
          title: '头像',
          type: 'picture',
          width: 70,
        },
        {
          key: 'nickName',
          title: '用户名',
          search: true,
        },
        {
          key: 'roles',
          title: '角色',
          type: 'status',
          mapper: {
            [UserRoles.Normal]: ['普通用户', 'primary'],
            [UserRoles.Hotel]: ['员工', 'warning'],
            [UserRoles.Admin]: ['管理员', 'danger'],
          },
          search: true,
        },
      ],
      permission: {
        edit: true,
        add: false,
        delete: true,
        search: true, // search为true时,该表必须至少有一个字段的search属性为true
      },
    },
    orders: {
      table: 'Orders',
      columns: [
        {
          key: 'no',
          title: '订单号',
          width: '200',
          search: true,
        },
        {
          key: 'userId',
          title: '用户',
          type: 'searchSelect',
          selectOptions: [],
          mapTo: {
            table: 'Users',
            key: 'id',
            value: 'nickName',
            in: true,
          },
          width: 120,
          search: true,
        },
        {
          key: 'telephone',
          title: '下单人手机',
          width: 100,
          search: true,
        },
        {
          key: 'fee',
          title: '价格',
          width: 70,
        },
      ],
      permission: {
        edit: false,
        add: false,
        delete: true,
        search: true,
      },
    },
  },
})

SignToken 获取 token

  • 请求格式:--
  • 请求参数:
    参数名 类型 必选 说明
    id Object Yes 用户id
    payload SignTokenPayload No token中其他参数配置参数
  • 返回格式:string
  • 请求示例:参考微信登录示例

部署项目

参见mobox 客户端使用指南。

调试接口

Postman 测试示例:


图 1-1

去搭建我的后台管理

去构建我的第一个微信小程序

附录

常用系统装饰器:
名称 参数 说明
@Api options?: ApiOptions 装饰方法,表示方法是可被外界访问的接口,并定义参数及数据类型
@Timestamp -- 装饰 Table 类,会在创建数据表时自动创建 created_at 和 updated_at 两个字段,分别记录数据的创建和更新时间;新增数据时 created_at 和 updated_at 字段自动填充数据不需要单独传参;更新某条数据时 updated_at 字段是需要传参数才会更新
@Col -- 装饰数据表字段,列名,命名规则是驼峰命名,数据库创建时自动加中划线,例如:字段名 studentName,数据库存储的字段名为student_name
@OldKey -- 装饰数据表字段,修改字段名时用于记录旧的字段名
@Unique -- 装饰数据表字段,该字段唯一不可重复
@NotNull -- 装饰数据表字段,该字段不可为空
@Default -- 装饰数据表字段,定义该字段默认值,若此字段的数据在几个固定数据之中,可使用枚举,如性别字段其范围是男和女,输入枚举名根据提示会自动引入枚举文件

ApiOptions接口:
参数名 数据类型 说明
params? ParamsObject 装饰方法,表示方法是可被外界访问的接口,并定义参数及数据类型
paramsType? json / text 定义接口参数类型(若有此参数接口请求类型为 POST)
token? boolean / ((token: Token) => boolean) 是否要传 token 参数
db?y boolean 是否获取数据库连接
return? ApiOptions / ParamType 定义接口返回数据

ParamsObject 接口:
参数名 数据类型 说明
[K: string] ParamsObject / ParamType 自定义属性

ParamType 属性值
数据类型 说明
any 任意类型
string --
boolean --
number --
object --
array --
string? --
boolean? 可空类型
number? 可空类型
array? 可空类型
object? 可空类型

Token接口:
参数名 数据类型 说明
id number 用户 ID
[K: string] any 自定义属性

SignTokenPayload接口:
参数名 数据类型 说明
exp? number 过期时间
[K: string] any 自定义属性

系统 CURD 语法糖:
名称 参数类型 说明
with object 获取数据库连接,返回this
startTrans -- 插入回滚起点,与with搭配使用
endTrans -- 插入回滚终点,与with搭配使用
backTrans -- 回滚,与with搭配使用
create object 新建数据 ,返回 this(注:新建数据数据库自动commit,暂不支持回滚操作)
where object 查询条件 ,与 findOne 或者 findAll 搭配使用,简单的条件查询如{name:'李四'},返回 this
fields string 指定查询返回结果的字段,返回 this
update object 更新的字段及字段值,与 where 搭配使用
offset number 从第几条开始查询,返回 this
limit number 查询条数,返回 this
order object 按指定字段升序或降序,如:order({id:'DESC'}) ,返回 this
findOne -- 查询符合条件的一条数据
findAll -- 查询符合条件的所有数据 ,与 where、offset、limit 和 order 搭配使用
query string 参数是数据库查询语句,与 where 搭配使用,where 参数为空
rawQuery string 参数是数据库查询语句,与 where 搭配使用,where 参数为空,返回数据库最原始的查询数据
delete -- 删除符合条件的数据
count -- 统计符合条件的数据,目前版本不支持单独指定字段,默认按照 ID 统计
printSql -- 打印 sql 语句,返回 this

where 方法定义查询条件,筛选指定参数在一定条件范围内的数据时,参数格式的书写有一定规则,如下:
关键词 数据类型 说明 参数示例
Eq number/string/boolean 相当于“=” {name:[Op.Eq,'李四']}
Neq number/string/boolean 相当于“<>” {name:[Op.Neq,'李四']}
Lt number 相当于 “<” {age:[Op.Lt,10]}
Gt number 相当于“>” {age:[Op.Gt,10]}
Elt number 相当于“<=” ({age:[Op.Elt,10]}
Lk string 相当于“LIKE” {name:[Op.Lk,'%李四%']}
In array 相当于“IN” {age:[Op.In,[8,9,10]]}
NotIn array 相当于“NOT IN” {name:[Op.Eq,[8,9,10]]}

参考

©2014-2021 MokYun 墨客云开放平台 苏ICP备16028042号 all right reserved,powered by Gitbook更新于: 2021-02-22 09:34:46

results matching ""

    No results matching ""