express-toybox
My Own Extra Stuff for Express.
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
var express = require('express-toybox')(require('express'));
express.toybox.utils.collectQueryParams(req);
or
var express = require('express'),
expressToybox = require('express-toybox');
expressToybox.utils.collectQueryParams(req);
features
errors
- StatusCode
- StatusLine
- HttpError
- ClientError
- BadRequest
- Unauthorized
- Forbidden
- NotFound
- ServerError
- InternalServerError
- NotImplemented
- ...
commons
server
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)
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)
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
express()...use(express.toybox.cors(config))...
{
TBW: ...
}
logger middleware
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
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
express()...useResource(path, resource-module)...
useResource('/posts/:id', {
index: function (req, res) { ... },
create: ...
show: function (req, res) { assert(req.param('id') == 123)... }
update: ...
destroy: ...
...
});
error404 error handler
send custom http 404 error with json/html/text by accept header in request.
express()...use(express.toybox.error404(config))...
{
code: custom-error-code,
message:'custom-error-message',
template: 'lodash-micro-template-string-for-404-error-page',
view:'path-view-template'
...
}
error500 error handler
send custom http error with json/html/text by accept header in request.
express()...use(express.toybox.error500(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',
...
}
declarative middlewares
express()...useCommonMiddlewares(config)...
or
var app = express();
...
express.toybox.common.configureMiddlewares(app, 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
compress(or compression)
{
TBW: ...
}
cookieParser
{
TBW: ...
}
methodOverride
{
TBW: ...
}
cors
- configure cors middleware(custom).
session
csrf(or csurf)
- configure csurf middleware(contrib).
{
TBW: ...
}
multipart
- configure multiparty middleware(by andrewrk) for
multipart/form-data
request.
{
TBW: ...
}
urlencoded
- configure body-parser urlencoded middleware(contrib) for
application/x-www-form-urlencoded
request.
{
TBW: ...
}
json
- configure body-parser json middleware(contrib) for
application/json
request.
{
TBW: ...
}
text
- configure body-parser text middleware(contrib) for
plain/text
request.
{
TBW: ...
}
raw
- configure body-parser raw middleware(contrib) for
application/octet-stream
request.
{
TBW: ...
}
declarative routes
express()...useCommonRoutes(config)...
or
var app = express();
...
express.toybox.common.configureRoutes(app, config);
...
{
root: path-to-directory,
statics: {statics-config...},
resources: {resources-config...},
errors: {errors-config...},
...
}
root
statics
{
'url-path': 'path-to-static-content-directory'
...
}
resources
- configure multiple resource routes(custom).
{
'url-path': 'resource-module-name'
...
}
errors
{
'404': {error404-config...},
'500': {error500-config...},
...
}
error404
- configure error404 error handler(custom).
error500
may the source be with you...