# apache-dubbo-node

> Dubbo is a family of libraries for building and consuming APIs on different languages and platforms, and [apache-dubbo](https://www.npmjs.com/package/apache-dubbo) brings type-safe APIs with Protobuf to TypeScript.

Latest version **0.0.10** (published 2023-08-10) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install apache-dubbo-node
pnpm add apache-dubbo-node
yarn add apache-dubbo-node
bun add apache-dubbo-node
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.10 |
| Published | 2023-08-10 |
| First published | 2023-07-06 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=16.0.0 |
| Dependencies | 2 |
| Unpacked size | 336.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 778 |
| Maintainers | jianyi-gronk |

## Links

- npm: https://www.npmjs.com/package/apache-dubbo-node
- Repository: https://github.com/apache/dubbo-js
- Homepage: https://github.com/apache/dubbo-js#readme
- Issues: https://github.com/apache/dubbo-js/issues
- npm.io page: https://npm.io/package/apache-dubbo-node

## Dependencies (2)

- [apache-dubbo](https://npm.io/package/apache-dubbo.md) ^0.0.10
- [headers-polyfill](https://npm.io/package/headers-polyfill.md) ^3.1.2

## Recent versions

- 0.0.10 (latest) — 2023-08-10
- 0.0.4-alpha (alpha) — 2023-09-04
- 0.0.3-alpha — 2023-09-04
- 0.0.1-alpha — 2023-09-04
- 0.0.9 — 2023-08-10
- 0.0.8 — 2023-07-21
- 0.0.5 — 2023-07-21
- 0.0.4 — 2023-07-21
- 0.0.3 — 2023-07-13
- 0.0.2 — 2023-07-06
- 0.0.1 — 2023-07-06

## README

# apache-dubbo-node

Dubbo is a family of libraries for building and consuming APIs on different languages and platforms, and 
[apache-dubbo](https://www.npmjs.com/package/apache-dubbo) brings type-safe APIs with Protobuf to 
TypeScript.

`apache-dubbo-node` provides the following adapters for Node.js:

### createDubboTransport()

Lets your clients running on Node.js talk to a server with the Dubbo protocol:

```diff
import { createPromiseClient } from "apache-dubbo";
+ import { createDubboTransport } from "apache-dubbo-node";
import { ElizaService } from "./gen/eliza_dubbo.js";

+ // A transport for clients using the Dubbo protocol with Node.js `http` module
+ const transport = createDubboTransport({
+   baseUrl: "https://demo.connect.build",
+   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.
```

### createGrpcTransport()

Lets your clients running on Node.js talk to a server with the gRPC protocol:

```diff
import { createPromiseClient } from "apache-dubbo";
+ import { createGrpcTransport } from "apache-dubbo-node";
import { ElizaService } from "./gen/eliza_dubbo.js";

+ // A transport for clients using the gRPC protocol with Node.js `http2` module
+ const transport = createGrpcTransport({
+   baseUrl: "https://demo.connect.build",
+   httpVersion: "2"
+ });

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

### createGrpcWebTransport()

Lets your clients running on Node.js talk to a server with the gRPC-web protocol:

```diff
import { createPromiseClient } from "apache-dubbo";
+ import { createGrpcWebTransport } from "apache-dubbo-node";
import { ElizaService } from "./gen/eliza_dubbo.js";

+ // A transport for clients using the Dubbo protocol with Node.js `http` module
+ const transport = createGrpcWebTransport({
+   baseUrl: "https://demo.connect.build",
+   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.
```


### dubboNodeAdapter()

Run your Dubbo RPCs on the Node.js `http`, `https`, or `http2` modules.

```ts
// connect.ts
import { DubboRouter } from "apache-dubbo";

export default function(router: DubboRouter) {
  // implement rpc Say(SayRequest) returns (SayResponse)
  router.rpc(ElizaService, ElizaService.methods.say, async (req) => ({
    sentence: `you said: ${req.sentence}`,
  }));
}
```

```diff
// server.ts
import * as http2 from "http2";
+ import routes from "dubbo";
+ import { dubboNodeAdapter } from "apache-dubbo-node";

http2.createServer(
+ dubboNodeAdapter({ routes }) // responds with 404 for other requests
).listen(8080);
```


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

`buf curl` with the gRPC protocol:

```bash
buf curl --schema buf.build/bufbuild/eliza \
  --protocol grpc --http2-prior-knowledge \
  -d '{"sentence": "I feel happy."}' \
  http://localhost:8080/buf.connect.demo.eliza.v1.ElizaService/Say
```

`curl` with the Dubbo protocol:

```bash
curl \
    --header "Content-Type: application/json" \
    --data '{"sentence": "I feel happy."}' \
     --http2-prior-knowledge \
    http://localhost:8080/buf.connect.demo.eliza.v1.ElizaService/Say
```

Node.js with the gRPC protocol:

```ts
import { createPromiseClient } from "apache-dubbo";
import { createGrpcTransport } from "apache-dubbo-node";
import { ElizaService } from "./gen/eliza_dubbo.js";

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

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 `createDubboTransport` from [apache-dubbo-web](https://www.npmjs.com/package/apache-dubbo-web) 
instead.


## Getting started

To get started with Dubbo, head over to the [docs](https://cn.dubbo.apache.org/zh-cn/overview/quickstart/) 
for a tutorial, or take a look at [our example](https://github.com/apache/dubbo-js/tree/dubbo3/example/).

---
_Source: https://npm.io/package/apache-dubbo-node · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
