# express-toybox

> My Own Extra Stuff for Express

Latest version **0.2.0** (published 2015-08-03) · MIT license · 0 weekly downloads

## Install

```sh
npm install express-toybox
pnpm add express-toybox
yarn add express-toybox
bun add express-toybox
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.0 |
| Published | 2015-08-03 |
| First published | 2014-01-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.12 |
| Dependencies | 17 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4 |
| Author | Dongsu Jang |
| Maintainers | iolo |

## Links

- npm: https://www.npmjs.com/package/express-toybox
- Repository: https://git@github.com/iolo/express-toybox
- Homepage: https://github.com/iolo/express-toybox#readme
- Issues: https://github.com/iolo/express-toybox/issues
- npm.io page: https://npm.io/package/express-toybox

## Dependencies (17)

- [q](https://npm.io/package/q.md) >=1.4.1
- [csurf](https://npm.io/package/csurf.md) >=1.8.3
- [debug](https://npm.io/package/debug.md) >=2.2.0
- [lodash](https://npm.io/package/lodash.md) >=3.10.0
- [morgan](https://npm.io/package/morgan.md) >=1.6.1
- [express](https://npm.io/package/express.md) >=4.13.1
- [multiparty](https://npm.io/package/multiparty.md) >=4.1.2
- [body-parser](https://npm.io/package/body-parser.md) >=1.13.2
- [compression](https://npm.io/package/compression.md) >=1.5.1
- [node-toybox](https://npm.io/package/node-toybox.md) latest
- [errorhandler](https://npm.io/package/errorhandler.md) >=1.4.1
- [morgan-debug](https://npm.io/package/morgan-debug.md) >=1.0.0
- [serve-static](https://npm.io/package/serve-static.md) >=1.10.0
- [cookie-parser](https://npm.io/package/cookie-parser.md) >=1.3.5
- [serve-favicon](https://npm.io/package/serve-favicon.md) >=2.3.0
- [express-session](https://npm.io/package/express-session.md) >=1.11.3
- [method-override](https://npm.io/package/method-override.md) >=2.3.4

## Recent versions

- 0.2.0 (latest) — 2015-08-03
- 0.1.12 — 2014-11-17
- 0.1.11 — 2014-09-14
- 0.1.10 — 2014-09-12
- 0.1.9 — 2014-09-06
- 0.1.8 — 2014-09-05
- 0.1.7 — 2014-09-04
- 0.1.6 — 2014-09-03
- 0.1.5 — 2014-08-21
- 0.1.4 — 2014-08-20
- 0.1.2 — 2014-07-09
- 0.1.1 — 2014-06-18
- 0.1.0 — 2014-06-03
- 0.0.3 — 2014-02-16
- 0.0.2 — 2014-01-26
- … 1 more at https://npm.io/package/express-toybox/versions

## README

express-toybox
==============

My Own Extra Stuff for [Express](http://expressjs.com).

## getting started

### install module via npm

```
$ npm install express-toybox
```

### install from git and generate documents

```
$ git clone http://github.com/iolo/express-toybox.git
$ cd express-toybox
$ npm install
$ grunt docs
$ open build/doxx/index.html
```

### run example

```
$ export DEBUG='*'
$ node example/app.js
$ open http://localhost:3333
```

### require it with/without express

```javascript
var express = require('express-toybox')(require('express'));
//var express = require('express-toybox')();
express.toybox.utils.collectQueryParams(req);
```
or
```javascript
var express = require('express'),
    expressToybox = require('express-toybox');
expressToybox.utils.collectQueryParams(req);
//express.toybox.utils.collectQueryParams(req);
```

## features

### errors

* StatusCode
* StatusLine
* HttpError
* ClientError
* BadRequest
* Unauthorized
* Forbidden
* NotFound
* ServerError
* InternalServerError
* NotImplemented
* ...

### commons

* [configureMiddlewares(config)](#declarative-middlewares)
* [configureRoutes(config)](#declarative-routes)

### server

* start()
* stop()

### utils

* collectQueryParams()
* pagination()
* renderViewOrRedirectToNext()
* echo()
* extendHttpRequest() - additional methods for express.request
    - req.strParam(name, fallback)
    - req.intParam(name, fallback)
    - req.numberParam(name, fallback)
    - req.boolParam(name, fallback)
    - req.dateParam(name, fallback)
    - req.collectParams(names)
    - ...
* extendHttpResponse() - additional methods for express.response
    - res.sendCallbackFn(next, status)
        ```javascript
        var fs = require('fs');
        app.get('/foo', function (req, res, next) {
                fs.readFile('file.txt', res.sendCallbackFn(next));
        });
        ```
    - res.jsonCallbackFn(next, status)
    - res.jsonpCallbackFn(next, status)
    - res.sendFileCallbackFn(next, status)
    - res.redirectCallbackFn(next, status)
    - res.renderCallbackFn(view, next, status)
    - res.sendLater(promise, next, status)
        ```javascript
        var FS = require('q-io/fs');
        app.get('/bar', function (req, res, next) {
                res.sendLater(FS.readFile('file.txt'), next);
        });
        ```
    - res.jsonLater(promise, next, status)
    - res.jsonpLater(promise, next, status)
    - res.sendFileLater(promise, next, status)
    - res.redirectLater(promise, next, status)
    - res.renderLater(view, promise, next, status)
    - ...
* ...

### cors middleware

* usage
```
express()...use(express.toybox.cors(config))...
```

* config
```
{
TBW: ...
}
```

### logger middleware

* usage

```
express()...use(express.toybox.logger(config))...
```

* log to console using morgan: 'combined', 'common', 'short', 'tiny', 'default' or 'dev'
* log to file using morgan
```
{
    file:'path-to-log-file',
    format:'morgan-format',
    morgan-options...
}
```
* log to debug using morgan-debug
```
{
    debug:'debug-namespace',
    format:'morgan-format',
    morgan-debug-options...
}
```
* ...

### session middleware

* usage
```
express()...use(express.toybox.session(config))...
```

* express-session with memory store: `{express-session-options...}`
* express-session with custom store:
```
{
    store:{
        module:'store-module-name',
        store-module-options...
    },
    express-session-options...
}
```
* ...

### resource routes

* usage
```
express()...useResource(path, resource-module)...
```

* example
```javascript
useResource('/posts/:id', {
    // get /posts
    index: function (req, res) { ... },
    // post /posts
    create: ...
    // get /posts/123
    show: function (req, res) { assert(req.param('id') == 123)... }
    // put /posts/123
    update: ...
    // delete /posts/123
    destroy: ...
    ...
});
```

### error404 error handler

send custom http 404 error with json/html/text by accept header in request.

* usage
```
express()...use(express.toybox.error404(config))...
```

* config
```
{
    code: custom-error-code,
    message:'custom-error-message',
    template: 'lodash-micro-template-string-for-404-error-page',
    view:'path-view-template'
    ...
}
```

* example: see [test case](tests/error404_test.js)

### error500 error handler

send custom http error with json/html/text by accept header in request.

* usage
```
express()...use(express.toybox.error500(config))...
```

* config
```
{
    status: custom-status-code,
    code: custom-error-code,
    mappings:{'err.name':{err-response-body...}, 'err.code': {err-response-body...}, ...},
    stack:true/false,
    template: 'lodash-micro-template-string-for-error-page',
    view:'path-view-template',
    ...
}
```

* see [test case](tests/error500_test.js)

## declarative middlewares

* usage
```
express()...useCommonMiddlewares(config)...
```
or
```
var app = express();
...
express.toybox.common.configureMiddlewares(app, config);
...
```

* config
```
{
    logger: {logger-config...},
    compress: {compress-config...},
    cookieParser: {cookieParser-config...},
    methodOverride: {methodOverride-config...},
    cors: {cors-config...},
    session: {session-config...},
    csrf: {csrf-config...},
    multipart: {multipart-config...},
    urlencoded: {urlencoded-config...},
    json: {json-config...},
    text: {text-config...},
    raw: {raw-config...},
    ...
}
```

### logger

* configure [morgan](https://github.com/expressjs/morgan) middleware(contrib) or [morgan-debug](https://github.com/ChiperSoft/morgan-debug) middleware(by ChiperSoft)
* via [logger](#logger-middleware) middleware(custom).

### compress(or compression)

* configure [compression](https://github.com/expressjs/compression) middleware(contrib).
```
{
TBW: ...
}
```

### cookieParser

* configure [cookie-parser](https://github.com/expressjs/cookie-parser) middleware(contrib).
```
{
TBW: ...
}
```

### methodOverride

* configure [method-override](https://github.com/expressjs/method-override) middleware(contrib).
```
{
TBW: ...
}
```

### cors

* configure [cors](#cors-middleware) middleware(custom).

### session

* configure [express-session](https://github.com/expressjs/session) middleware(contrib)
* via [session](#session-middleware) middleware(custom).

### csrf(or csurf)

* configure [csurf](https://github.com/expressjs/csurf) middleware(contrib).
```
{
TBW: ...
}
```

### multipart

* configure [multiparty](https://github.com/andrewrk/node-multiparty) middleware(by andrewrk) for `multipart/form-data` request.
```
{
TBW: ...
}
```

### urlencoded

* configure [body-parser](https://github.com/expressjs/body-parser) urlencoded middleware(contrib) for `application/x-www-form-urlencoded` request.
```
{
TBW: ...
}
```

### json

* configure [body-parser](https://github.com/expressjs/body-parser) json middleware(contrib) for `application/json` request.
```
{
TBW: ...
}
```

### text

* configure [body-parser](https://github.com/expressjs/body-parser) text middleware(contrib) for `plain/text` request.
```
{
TBW: ...
}
```

### raw

* configure [body-parser](https://github.com/expressjs/body-parser) raw middleware(contrib) for `application/octet-stream` request.
```
{
TBW: ...
}
```

## declarative routes

* usage
```
express()...useCommonRoutes(config)...
```
or
```javascript
var app = express();
...
express.toybox.common.configureRoutes(app, config);
//expressToybox.common.configureRoutes(app, config);
...
```

* config
```
{
    root: path-to-directory,
    statics: {statics-config...},
    resources: {resources-config...},
    errors: {errors-config...},
    ...
}
```

### root

* configure [serve-static](https://github.com/expressjs/serve-favicon) middleware(contrib) and [serve-favicon](https://github.com/expressjs/serve-favicon) middleware(contrib).

### statics

* configure multiple [serve-static](https://github.com/expressjs/serve-favicon) middleware(contrib).
```
{
    'url-path': 'path-to-static-content-directory'
    ...
}
```

### resources

* configure multiple [resource](#resource-routes) routes(custom).
```
{
    'url-path': 'resource-module-name'
    ...
}
```

### errors

```
{
    '404': {error404-config...},
    '500': {error500-config...},
    ...
}
```

#### error404

* configure [error404](#error404-error-handler) error handler(custom).

#### error500

* configure [error500](#error500-error-handler) error handler(custom) and [errorhandler](https://github.com/expressjs/errorhandler) middleware(contrib).

*may the source be with you...*

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