/express-toss

Makes express router handlers aware of promises. Brings more clear dataflow to handlers.

Primary LanguageJavaScriptOtherNOASSERTION

express-toss

Travis Coveralls ISC licensed npm|express-toss flowtype

Makes express router handlers aware of promises. Brings more clear dataflow to express handlers.

toss.method

Transforms (rq) => Promise function to (rq, rs) => void function for use inside Express' handlers.

resolving

import tosser from 'express-toss'

var toss = tosser({ debug: true })

express.get('/resource', toss.method(rq =>
{
  return db.query().then(transform) /* … */
}))

— return value is used as response body with status 200 and adequate mime. MIME would be determined automatically by express (application/json in case of Object, text/html in case of string, learn more).

rejecting

import tosser from 'express-toss'

var toss = tosser({ debug: true })

express.get('/resource', toss.method(rq =>
{
  throw new TypeError
}))

— sync throws or promise rejections will convert into 500s with specific JSON body. If debug = true body is detailed, if debug = false it is like a simple internal-ish error.

Resp()

import tosser from 'express-toss'
import Resp   from 'express-toss/Resp'

var toss = tosser({ debug: true })

express.get('/resource', toss.method(rq =>
{
  // use `Resp` to fine-control response
  return Resp(200, 'text/html', html)

  // can be used for 400s
  return Resp(400, { server: error })
}))

Resp([status], [mime], body) is applied to express' response. Resp can be sync-returned or used inside promise.

Wrong()

import tosser from 'express-toss'
import Wrong  from 'express-toss/Wrong'

var toss = tosser({ debug: true })

// use Wrong to create protocol-level errors
// Wrong(code) creates constructor for `code` error
var NotPermitted = Wrong('permission_required')
var NotFound = Wrong('user_not_found', { status: 404 })

express.get('/resource', toss.method(rq =>
{
  // throwing or returning `Wrong` to fine-control response
  throw NotPermitted()

  // details can be supplied
  throw NotFound({ username: 'username' })
}))

Wrong(code, [options]) creates new specific error factory. Calling that factory creates error instance. This instance can be throwed/rejected or sync-returned to indicate error situation.

flow

FlowType definitions included.

license

ISC © Strider, 2017 — 2019.