@lx-frontend/grpc-shared
v0.3.4
Published
grpc 工具库
Downloads
101
Maintainers
Keywords
Readme
@lx-frontend/grpc-shared
grpc 相关工具函数
Description
grpc 调用相关封装函数。
Usage
分页请求封装方法
把生产分页token和filter、sort集成到一个函数内,简化调用逻辑
传入 serviceFn
、页数、条数,过滤条件(可选),排序(可选)即可完成分页请求。
import { getPageData } from '@lx-frontend/grpc-shared';
function listRoles(data: ListRolesRequest.AsObject) {
return grpcPromise({
method: 'listRoles',
data
})
}
// 简单使用,传递页数和条数即可。
getPageData(listRoles, 1, 10).then((response) => {
console.log('response', response)
})
// 传入了 查询字段 与 排序字段
getPageData(listRoles, 1, 10, [
Has('name', 'mind'),
Eq('status', 1)
], [
{Field: "timestamp", Direction: "asc"},
{Field: "id", Direction: "desc"}
]).then((response) => {
console.log('response', response)
})
单独使用
- object2Request 把 js 对象转换成 grpc request 实例。支持多层对象
import { GreeterPromiseClient } from './dist/helloworld_grpc_web_pb';
import { HelloRequest, UserInfo, Store } from './dist/helloworld_pb';
import { object2Request } from '@lx-frontend/grpc-shared';
const client = new GreeterPromiseClient('http://localhost:50051')
const helloRequest2 = object2Request(HelloRequest, {
name: "123",
userinfo: {
id: 123,
name: 'mind',
age: 20,
store: {
sid: 12,
sname: 'sname'
}
}
}, {
userinfo: UserInfo,
store: Store,
})
client.sayHello(helloRequest2, {}).then((res) => {
const result = res.toObject()
console.log('result', result)
})
- 支持对层对象字段是数组集合
import { SetRolePermsRequest } from "./dos-boss-bff-sdk/lixin/dos/boss-bff/v1/svc_pb";
import { Permission } from "./dos-boss-bff-sdk/lixin/dos/boss-bff/v1/msg_pb";
import { object2Request } from '@lx-frontend/grpc-shared';
const setRolePermsData = {
name: 'role/id/1',
permissionsList: [
{
name: 'name-0',
displayName: 'displayName-0',
code: 'code-0',
chirdrenList: []
},
{
name: 'name-1',
displayName: 'displayName-1',
code: 'code-1',
chirdrenList: []
},
{
name: 'name-2',
displayName: 'displayName-2',
code: 'code-2',
chirdrenList: []
}
]
}
// 得到请求 request 数据
const setRolePermsRequest = object2Request(SetRolePermsRequest, setRolePermsData, {
permissionsList: Permission,
// 注意,多层对象,有几个,则需要传递对应 requestClass 类进去。
// 多层对象有,permissionsList、chirdrenList 所以都需要传递,他们指向的 requestClass 都是 Permission
chirdrenList: Permission
})
filter Query 构建
用与生成后台 gprc filter 参数构建,可以用来控制后台 grpc 服务返回字段,按需使用。
使用说明:
- 为了简化使用,Filter 函数的值,需要来自于
Eq, Gte, Gt, Has, Lt, Lte, Ne
这些函数的返回值。 - 更多使用方式,可以查看 测试用例
简单示例代码
import { NewQuery, Eq, Gte, Gt, Has, Lt, Lte, Ne } from "./lib";
async function demo() {
const query = NewQuery()
.Filter(Eq('name', "李四"))
.Filter(Gte('age', 1))
.Filter(Gt('id', 2))
.Filter(Has('ddd', "123"))
.Filter(Lt('pw', 123))
.Filter(Lte('lll', [222, 33]))
.Filter(Ne('neKey', "www"))
const filterStr = query.String()
console.log(filterStr) // name = "李四" AND age >= 1 AND id > 2 AND ddd:"123" AND pw < 123 AND lll <= (222, 33) AND neKey != www
// 传递给后台,过滤参数。
const res = await client.GetCarModelRequest({
Name: "123",
Filter: filterStr,
})
}
sort 构建
构建 sort 字符串
import { SortBy } from "./lib";
// 可以是单个参数,也可以是多个参数
const sort = SortBy({Field: 'timestamp', Direction: "asc"}, {Field: "id", Direction: "desc"})
const sortStr = sort.String() // timestamp asc, id desc