@ connectedrpc/ connected- next (中文(简体) )
连接是一个图书馆大家庭,用于在不同语言和平台上建立和消费API,以及 @ connectrpc/ 连接 将带有Protobuf的 安全 API 带到 类型脚本 .
@connectrpc/connect-next 提供插件 下一个.js, (中文(简体) ),
网络反应框架.
下一个 JsApiRouter ()
通过 Next.js API 路由提供您的 RPC 连接 。 启用在 Next.js 中的连接, 在您的工程中添加两个文件 :
.
├── connect.ts
└── pages
└── api
└── [[...connect]].ts
说明: 您的连接 API 路由需要设置
pages/不过你 可以使用app/app路由器同时设置目录.
新文件 connect.ts 您的RPC 注册地址 :
// connect.ts
import { ConnectRouter } from "@connectrpc/connect";
export default function (router: ConnectRouter) {
// implement rpc Say(SayRequest) returns (SayResponse)
router.rpc(ElizaService, ElizaService.methods.say, async (req) => ({
sentence: `you said: ${req.sentence}`,
}));
}
pages/api/[[..connect]].ts 是下一个.js 所有 API 路径数字 :
// pages/api/[[..connect]].ts
import { nextJsApiRouter } from "@connectrpc/connect-next";
import { createValidateInterceptor } from "@connectrpc/validate";
import routes from "../../connect";
const { handler } = nextJsApiRouter({
interceptors: [createValidateInterceptor()],
routes,
});
export default handler;
// Required: Connect parses request bodies itself, so the Next.js body
// parser must be disabled. Without this, RPCs will fail.
export const config = {
api: {
bodyParser: false,
},
};
随着服务器的运行,您可以使用任何连接或gRPC-Web客户端进行请求.
请注意,Next.js服务于您的所有RPC与 /api 前缀.
curl 与连接协议 :
curl \
--header "Content-Type: application/json" \
--data '{"sentence": "I feel happy."}' \
--http2-prior-knowledge \
http://localhost:3000/api/connectrpc.eliza.v1.ElizaService/Say
带有 gRPC-web 协议的节点(使用从 @ connectrpc/ 连接- 节点:
import { createClient } from "@connectrpc/connect";
import { createGrpcWebTransport } from "@connectrpc/connect-node";
import { ElizaService } from "./gen/eliza_connect.js";
const transport = createGrpcWebTransport({
baseUrl: "http://localhost:3000/api",
httpVersion: "1.1",
});
const client = createClient(ElizaService, transport);
const { sentence } = await client.say({ sentence: "I feel happy." });
console.log(sentence); // you said: I feel happy.
网页浏览器的客户端实际上与这个示例完全相同 - 它会
简单的使用 createConnectTransport 从 @ connectrpc/ 连接- web
换句话说.
注意对gRPC的支持有限,因为许多gRPC客户需要HTTP/2,
和下一个.js不支持节点.js http2 模块.
部署到韦尔塞尔
目前, @connectrpc/connect-next 不支持 Vercel Edge 运行时间.
它需要节点.js服务器运行时间,在部署时默认使用
到凡尔塞尔.