# casper

> Helpers and handlers for building APIs in express.

Latest version **0.1.1** (published 2013-05-31) · MIT license · 0 weekly downloads

## Install

```sh
npm install casper
pnpm add casper
yarn add casper
bun add casper
```

## 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.1.1 |
| Published | 2013-05-31 |
| First published | 2013-04-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 13 |
| Author | Tom Ashworth |
| Maintainers | phuu |

## Links

- npm: https://www.npmjs.com/package/casper
- Repository: git@github.com:phuu/casper
- npm.io page: https://npm.io/package/casper

## Recent versions

- 0.1.1 (latest) — 2013-05-31
- 0.1.0 — 2013-05-26
- 0.0.8 — 2013-05-23
- 0.0.7 — 2013-04-10
- 0.0.6 — 2013-04-05
- 0.0.5 — 2013-04-05

## README

# casper

Helpers and handlers for building (jsonp) APIs in [Express](http://expressjs.com).

[![build status](https://secure.travis-ci.org/phuu/casper.png)](http://travis-ci.org/phuu/casper)

All caspers methods return a function that can be used in the Express callback chain, or as callbacks for your database.

## example

The following examples assume this:

```javascript
// express 'app' available
var casper = require('casper');
```

### Basic handlers

Send an empty opject:

```javascript
// res.jsonp({}) is sent
app.get('/', casper.noop());
```

Or return some custom data:

```javascript
// res.jsonp({ hello: 'world' }) is sent
app.get('/', casper.noop({
  hello: 'world'
}));
```

### Database callbacks

#### casper.db

`casper.db` returns a function to be used as a database callback. It assumes the first argument is an `err` and the second is the `data` is has to send – an array or an object.

It takes Express' `req` and `res` as arguments:

```javascript
casper.db(req, res)
```

For example:

```javascript
app.get('/', function (req, res) {
  YourModel
    .find()
    .exec(casper.db(req, res));
});
```

It can also take a callback which, if present, is called instead of sending data directly back to the client.

With a callback:

```javascript
app.get('/', function (req, res) {
  YourModel
    .find()
    .exec(casper.db(req, res, function (err, data) {
      // Do something with data
    }));
});
```

If it is passed an error, it will pass that on to the client with a 500 status code. If it recieves no data, or an empty array, it will return the data it recieved with a 404 status.

### Checks & filters

#### capser.check.body

Check for the presence of data in the body using a key:

```javascript
// body is { testKey: "Hello" }
// calls next() becuase present
app.get('/',
        casper.check.body('testKey'),
        casper.noop());
```

If the data is missing from the body it sends a 400 error, detailing the missing parameter:

```javascript
app.get('/',
        casper.check.body('nonExistantKey'),
        casper.noop());

// results in
res.jsonp(400, { error: 'Missing nonExistantKey from body.' });
```

#### capser.rm.body

Remove a key from the body:

```javascript
// body is { testKey: "Hello", otherKey: "World" }
app.get('/',
        casper.rm('testKey'),
        casper.noop());

// afterwards body is { otherKey: "World" }
```

#### casper.allow.body

Whitelist a key or array of keys allowed on the body.

```javascript
// body is { testKey: "Hello", otherKey: "World" }
app.get('/',
        casper.allow.body('otherKey'),
        casper.noop());

// afterwards body is { test: "Hello" }
```

With an array:

```javascript
// body is { testKey: "Hello", otherKey: "World", unwantedKey: "World" }
app.get('/',
        casper.allow.body(['testKey', 'otherKey']),
        casper.noop());

// afterwards body is { testKey: "Hello", otherKey: "World" }
```

## install

`npm install casper`

## license

MIT

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