Skip to content

Koa middleware to return streaming JSON responses using AsyncIterators

License

Notifications You must be signed in to change notification settings

koajs/json-async-iterator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@koa/json-async-iterator

Koa JSON response body streaming for async iterators

Usage

const jsonAsyncIterator = require('@koa/json-async-iterator')
const app = new Koa()

app.use(jsonAsyncIterator())

app.use(async ctx => {
  const iterator = async function* () {
    yield Promise.resolve({ foo: 'bar' })
    yield Promise.resolve({ baz: 'qux' })
  }
  ctx.body = iterator()
})

Output:

[
{"foo":"bar"}
,
{"baz":"qux"}
]

Example with PostgreSQL:

import QueryStream from 'pg-query-stream'
import pg from 'pg'

const client = new pg.Client()
await client.connect()

// later in your middleware
app.use(async (ctx) => {
    // stream all the rows from the database to the client
    ctx.body = client.query(new QueryStream(`
        SELECT * 
        FROM posts
        ORDER BY id ASC
    `))
})

Options

before

The string to write before the first value in the iterator.

Default: '[\n'

separator

The string to write between each value in the iterator.

Default: '\n,\n'

after

The string to write after the last value in the iterator.

Default: '\n]'

formatError

A function that takes an error and returns a value to be stringified.

Default: (err) => ({ error: { message: err.message } })

pretty

Whether to pretty-print the JSON.

Default: false

spaces

The number of spaces to use for pretty-printing.

Default: 2

License

MIT

About

Koa middleware to return streaming JSON responses using AsyncIterators

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published