停止内耗:我们写的是业务,不是 HTTP 试卷
做开发时,你是否也陷入过这种无效纠结:接口是用 POST 还是 PUT?状态码返 200 还是 201?前端 Axios 封装了一层,后端 Router 又写了一堆。
累不累?我们只是想调个函数存点数据而已。
今天介绍的 js-rpc,旨在让你彻底忘掉 HTTP 协议,回归 JavaScript 函数调用的本质。
1. 服务端:极速启动
拒绝复杂的样板代码,我们先看目录结构,一切约定优于配置。
目录结构
text
my-server/
├── api/
│ └── user.js <-- 对应客户端 rpc.user
├── index.js <-- 服务入口
└── package.json
启动服务 (index.js)
一行代码即可启动高性能 Node.js 服务,自动扫描 api 目录。
javascript
const { create } = require('rpc-server-node');
create(); // 默认监听 3000 端口
编写业务 (api/user.js)
在 api 目录下新建文件,导出的函数即接口。没有 Router,没有 Controller,只有纯粹的业务逻辑。
javascript
module.exports = {
// 登录接口
async login(username, pwd) {
if (username !== 'admin') {
throw new Error('用户不存在');
}
// 模拟返回数据
return { id: 101, token: 'abc-123', name: username };
},
// 获取详情
async getProfile(uid) {
return { uid, role: 'developer' };
}
};
2. 前端:像调本地方法一样
前端(Web / 小程序 / UniApp)不需要定义 API URL,不需要关心参数在 body 还是 query 里。
调用示例
javascript
import { create } from 'rpc-client-fetch';
// 初始化
const rpc = create({ url: 'http://localhost:3000' });
async function main() {
try {
// ✨ 魔法时刻:直接调用服务端的函数
const user = await rpc.user.login('admin', '123456');
console.log('登录成功', user);
} catch (err) {
// 自动捕获后端抛出的 Error
console.error('出错了:', err.message);
}
}
3. 一套代码,打通全栈
js-rpc 的核心在于全平台兼容。你编写的同一套 api 业务代码,可以无缝运行在:
- Node.js 服务器 (rpc-server-node)
- 微信云开发 (rpc-server-tcb)
- 腾讯云 Serverless (rpc-server-scf)
而在客户端,无论是 Web、小程序、UniApp 还是 Node.js,调用方式完全一致。
这就是真正的全栈:写一次,到处运行。
🔗 开源地址
项目已开源,欢迎 Star ⭐️
- GitHub : github.com/myliweihao/...
- 客户端 :
npm i rpc-client-fetch - 服务端 :
npm i rpc-server-node
从今天起,把 HTTP 协议交给框架,把精力留给改变世界的业务逻辑。