This package has been deprecated

Author message:

Connect has moved to its own org @connectrpc and has a stable v1. Run `npx @connectrpc/connect-migrate@latest` to update. See https://github.com/connectrpc/connect-es/releases/tag/v0.13.1 for details.

@bufbuild/connect-express
TypeScript icon, indicating that this package has built-in type declarations

0.13.0 • Public • Published

@bufbuild/connect-express

Connect is a family of libraries for building and consuming APIs on different languages and platforms, and @bufbuild/connect brings type-safe APIs with Protobuf to TypeScript.

@bufbuild/connect-express provides a middleware for Express, the fast, unopinionated, minimalist web framework for Node.js

expressConnectMiddleware()

Adds your Connect RPCs to an Express server.

// connect.ts
import { ConnectRouter } from "@bufbuild/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}`,
  }));
}
// server.ts
import http from "http";
import express from "express";
+ import routes from "connect";
+ import { expressConnectMiddleware } from "@bufbuild/connect-express";

const app = express();

+ app.use(expressConnectMiddleware({
+  routes
+ }));

http.createServer(app).listen(8080);

With that server running, you can make requests with any gRPC-web or Connect client.

curl with the Connect protocol:

curl \
    --header "Content-Type: application/json" \
    --data '{"sentence": "I feel happy."}' \
    http://localhost:8080/connectrpc.eliza.v1.ElizaService/Say

Node.js with the gRPC-web protocol (using a transport from @bufbuild/connect-node):

import { createPromiseClient } from "@bufbuild/connect";
import { createGrpcWebTransport } from "@bufbuild/connect-node";
import { ElizaService } from "./gen/eliza_connect.js";

const transport = createGrpcWebTransport({
  baseUrl: "http://localhost:8080",
  httpVersion: "1.1",
});

const client = createPromiseClient(ElizaService, transport);
const { sentence } = await client.say({ sentence: "I feel happy." });
console.log(sentence) // you said: I feel happy.

A client for the web browser actually looks identical to this example - it would simply use createConnectTransport from @bufbuild/connect-web instead.

Note that support for gRPC is limited, since many gRPC clients require HTTP/2, and Express does not support the Node.js http2 module.

Getting started

To get started with Connect, head over to the docs for a tutorial, or take a look at our example.

Readme

Keywords

none

Package Sidebar

Install

npm i @bufbuild/connect-express

Weekly Downloads

3,012

Version

0.13.0

License

Apache-2.0

Unpacked Size

12.4 kB

Total Files

9

Last publish

Collaborators

  • bufbot
  • bufdev
  • cmahony
  • dfyock-buf
  • gwong-buf
  • jdailey_buf
  • psachs-buf
  • sayers-buf
  • srikrsna-buf
  • tstamm-buf