你是否也曾被小程序云函数中那坨臃肿的 index.js 文件所困扰?
javascript
// 你是不是也写过这样的代码?
exports.main = async (event, context) => {
switch (event.type) {
case 'addUser':
return await user.add(event.data);
case 'getUserInfo':
return await user.getInfo(event.data);
case 'createOrder':
return await order.create(event.data);
case 'getOrderDetail':
return await order.get(event.data);
// ... 随着业务增加,这里会变得越来越长,难以维护
}
}
每增加一个 API,就要在这里加一个 case;每次修改,都要小心翼翼。这种手动"路由"的方式,不仅繁琐、易错,而且毫无优雅可言。它只是胶水代码,粘合业务,却毫无美感。
我们受够了!
今天,向你隆重介绍 rpc-server-tcb ------ 一个为小程序云开发设计的、零配置、约定优于配置的 RPC 服务端框架。它的使命只有一个:将你从 switch...case 的地狱中解放出来,让你专注于业务,而不是路由。
✨ 魔法是如何发生的?
rpc-server-tcb 的哲学是"约定优于配置"。我们约定,你的业务逻辑应该像这样组织:
lua
cloudfunctions/
└── rpc/
├── api/ <-- 所有的业务逻辑,按模块划分
| ├── user.js # 用户模块
| └── order.js # 订单模块
├── index.js <-- 你的云函数入口
└── package.json
在 api/ 目录下,每一个 .js 文件都是一个独立的业务模块。例如,user.js 可能长这样:
api/user.js
javascript
module.exports = {
/**
* 根据 ID 获取用户信息
* @param {string} userId - 用户ID
*/
async getInfo(userId) {
// ... 你的数据库查询逻辑
return { id: userId, name: 'Alice', role: 'admin' };
},
/**
* 获取当前调用者的 OpenID
*/
getMyOpenId() {
// 想要 event 和 context?没问题,通过 this 就能拿到!
return this.event.userInfo.openId
}
}
注意到了吗?这里只有纯粹的业务逻辑,干净、清晰。
那么,那个曾经臃肿的入口文件 index.js 现在需要写什么呢?
答案是:只需要一行核心代码。
index.js
javascript
const { createRpcServer } = require('rpc-server-tcb');
// 是的,就这么简单。它会自动加载 api 目录下的所有模块。
exports.main = createRpcServer();
当你部署这个云函数后,rpc-server-tcb 会自动帮你完成所有路由工作。一个指向 user 模块 getInfo 方法的请求,会被精准地分发到 api/user.js 中 getInfo 函数,并将参数完美传递。
🚀 你将获得什么?
- 极致的简洁: 云函数入口只有一行代码,彻底告别胶水逻辑。
- 清晰的模块化: 业务按文件天然隔离,高内聚、低耦合,维护性 MAX!
- 优雅的上下文注入 : 无需污染函数签名,通过
this.event和this.context即可访问原始上下文,干净利落。 - 零配置与热更新 : 默认工作,无需配置。开发时修改
api/下的代码,热更新立即生效,极大提升开发效率。
立即开始
在你的云函数目录下,安装它:
bash
npm install rpc-server-tcb
然后,用我们上面展示的一行代码,重构你的 index.js 吧!把时间还给业务,把优雅还给代码。
但这还只是故事的一半。 有了如此清爽的服务端,我们如何才能在小程序端以同样优雅的方式调用它呢?
敬请期待本系列第二篇文章:《魔法降临!让小程序调用云函数如丝般顺滑》 ,我们将为你揭晓 rpc-client-tcb 的神秘面纱。
NPM 地址 : www.npmjs.com/package/rpc...
小程序示例片段 : developers.weixin.qq.com/s/BlGqopmS8...