# koa-grpc

> The grpc middle of Koa.

Latest version **1.0.6** (published 2022-06-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install koa-grpc
pnpm add koa-grpc
yarn add koa-grpc
bun add koa-grpc
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.6 |
| Published | 2022-06-18 |
| First published | 2022-03-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Unpacked size | 13.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Cooper Hsiung |
| Maintainers | cooperhsiung |
| Keywords | koa, grpc |

## Links

- npm: https://www.npmjs.com/package/koa-grpc
- Repository: https://github.com/cooperhsiung/koa-grpc
- Homepage: https://github.com/cooperhsiung/koa-grpc#readme
- Issues: https://github.com/cooperhsiung/koa-grpc/issues
- npm.io page: https://npm.io/package/koa-grpc

## Dependencies (6)

- [koa](https://npm.io/package/koa.md) ^2.13.4
- [koa-mount](https://npm.io/package/koa-mount.md) ^4.0.0
- [koa-compose](https://npm.io/package/koa-compose.md) ^4.1.0
- [@grpc/grpc-js](https://npm.io/package/@grpc/grpc-js.md) ^1.5.10
- [google-protobuf](https://npm.io/package/google-protobuf.md) ^3.20.0-rc.2
- [@grpc/proto-loader](https://npm.io/package/@grpc/proto-loader.md) ^0.6.9

## Recent versions

- 1.0.6 (latest) — 2022-06-18
- 1.0.5 — 2022-04-09
- 1.0.4 — 2022-03-27
- 1.0.3 — 2022-03-26
- 1.0.2 — 2022-03-26
- 1.0.1 — 2022-03-26
- 1.0.0 — 2022-03-26

## README

# koa-grpc

[![NPM Version][npm-image]][npm-url]
[![Node Version][node-image]][node-url]

The grpc middle of Koa, foundation for [koaland](https://www.npmjs.com/package/koaland)

## Installation

```bash
npm i koa-grpc -S
```

## Usage

### simple app

```typescript
import { Context } from 'koa';
import KoaGrpc from 'koa-grpc';
var { GreeterService } = require('./gen_code/helloworld_grpc_pb');

const app = new KoaGrpc({ service: GreeterService });

// not found
app.use((ctx: Context) => {
  console.log('ctx.request: ', (ctx.request as any).getName());
});

// result -> Error: 12 UNIMPLEMENTED: Not Found

app.listen('0.0.0.0:50051');
console.log('listening on 50051...');
```

### with route

```typescript
import { Context } from 'koa';
import KoaGrpc from 'koa-grpc';
const mount = require('koa-mount');

var { GreeterService } = require('./gen_code/helloworld_grpc_pb');
var messages = require('./gen_code/helloworld_pb');

const app = new KoaGrpc({ service: GreeterService });

// with route
app.use(
  mount('/sayHello', function (ctx: Context) {
    console.log('ctx.request: ', (ctx.request as any).getName());

    var reply = new messages.HelloReply();
    reply.setMessage('Hello ' + ctx.call.request.getName());
    ctx.body = reply;
  })
);

app.listen('0.0.0.0:50051');
console.log('listening on 50051...');
```

### use middleware

```typescript
import { Context } from 'koa';
import KoaGrpc from 'koa-grpc';
const mount = require('koa-mount');

var { GreeterService } = require('./gen_code/helloworld_grpc_pb');
var messages = require('./gen_code/helloworld_pb');

const app = new KoaGrpc({ service: GreeterService });

// use middleware
app.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  console.log(`process ${ctx.path} request from ${ctx.ip} cost ${Date.now() - start}ms`);
});

// with route
app.use(
  mount('/sayHello', async function (ctx: Context) {
    console.log('ctx.request: ', (ctx.request as any).getName());

    var reply = new messages.HelloReply();
    reply.setMessage('Hello ' + ctx.call.request.getName());

    await sleep(300); // wait sth
    ctx.body = reply;
  })
);

app.listen('0.0.0.0:50051');
console.log('listening on 50051...');

function sleep(delay = 1000) {
  return new Promise((resolve) => setTimeout(resolve, delay));
}
```

## Generate code

```sh
npm install -g grpc-tools
cd ./examples
grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./gen_code --grpc_out=grpc_js:./gen_code helloworld.proto
```

## Examples

examples with client are listed at [examples](https://github.com/cooperhsiung/koa-grpc/tree/master/examples)

## Others

[grpc node.js part quickstart](https://grpc.io/docs/languages/node/quickstart/)

[more node.js examples from official](https://github.com/grpc/grpc/tree/master/examples/node)

## License

MIT

[npm-image]: https://img.shields.io/npm/v/koa-grpc.svg
[npm-url]: https://www.npmjs.com/package/koa-grpc
[node-image]: https://img.shields.io/badge/node.js-%3E=8-brightgreen.svg
[node-url]: https://nodejs.org/download/

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