cockrel-middleware
v1.2.0
Published
Cockrel plugin for making HTTP middlewares
Downloads
7
Maintainers
Readme
cockrel-middleware
Cockrel plugin for making HTTP middlewares
Install
Require cockrel and pass it to cockrel-middleware to load the plugin, unlike other plugins, keep a reference to cockrel-middleware around, you're going to need it later:
const co = require('cockrel');
const mid = require('cockrel-middleware');
mid(co); // Good to go!
Usage
Cockrel-middleware is a plugin that provides step functions as well as a wrapper used to connect Cockrel chains to Express, Connect or other middleware based HTTP servers.
Wrapper:
Steps:
begin
Use the begin function of the plugin object to transform a chain into a middleware, this example uses express to create a simple JSON echo server.
const express = require('express');
const express = require('body-parser');
const co = require('cockrel');
const mid = require('cockrel-middleware');
mid(co);
const app = express();
app.use(bodyParser.JSON());
app.post('/echo', mid.begin(co.pick({data : '!body'}).response('json')));
You'll immediately notice some differences from regular cockrel chain usage, we do not explicitly call chain.begin with a value, the middleware.begin wrapper does that for us, passing the framework's request object as the data to our chain. In this example we use the builtin 'pick' step to create a new value with the posted JSON body, which we then respond with using express' res.json method.
response
the .response step for the most part wraps the response object provided to the middleware by your HTTP framework of choice. This means in the case of express, you can invoke any of res.send, res.json, res.status etc.. with .response('method', args). You can call .response multiple times to set headers, status etc.
If no args are provided, the previous chain result will be passed as the value. For example:
app.get('/cat', mid.begin(
co.pick({species : 'cat', name : 'mittens'}).response('json')));
Will invoke the express response.json method like this:
response.json({species : 'cat', name : 'mittens'})
However an explicit static response can be delivered with:
app.post('/cat', mid.begin(
co.pick({species : 'cat', name : 'mittens'})
.do(saveCat)
.response('json', {msg: 'ok'})));
It is important to note that .response is a pass-through step, it will not mutate the previous step's value, and it will pass it down the chain.
next
In the event that you are constructing a middleware, and expect the request to continue to another middleware, be sure to call .next() to hand over to the next middleware in the chain.