NateFerrero/amna

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# AMNA

<b>A</b>mazing <b>M</b>ongoose <b>N</b>ode.js <b>A</b>PI

### JavaScript API Server Framework

[![amna on npm](https://nodei.co/npm/amna.png?downloads=true&stars=true)](https://nodei.co/npm/amna/)
[![amna on npm](https://nodei.co/npm-dl/amna.png?months=6&height=2)](https://nodei.co/npm/amna/)

[![Github Stars](https://img.shields.io/github/stars/NateFerrero/amna.svg)](https://github.com/NateFerrero/amna)
[![Package Version](https://img.shields.io/npm/v/amna.svg)](https://www.npmjs.com/package/amna)
[![Package License](https://img.shields.io/npm/l/amna.svg)](https://www.npmjs.com/package/amna)
[![Code Climate](https://img.shields.io/codeclimate/github/NateFerrero/amna.svg)](https://codeclimate.com/github/NateFerrero/amna)
[![Test Coverage](https://img.shields.io/codeclimate/coverage/github/NateFerrero/amna.svg)](https://codeclimate.com/github/NateFerrero/amna)
[![Build Status](https://img.shields.io/travis/NateFerrero/amna.svg)](https://travis-ci.org/NateFerrero/amna)

## Installation

```bash
npm install amna
```

## Usage

```js
var amna = require('amna');

amna.registerServices([ ... ]);     // Global Services
amna.registerThings([ ... ]);       // Models & Schemas

// Additional setup goes here
// - authentication (if needed, see authentication under Table of Contents)
// - amna.set('view engine', 'ejs') if you need views

amna.registerModules('/', [ ... ]); // URL Modules
//                    ^ base URL

amna.start({
    mongo: {db: 'amna-test'},       // Mongo connection
    port: 8080,                     // Port
    settings: {                     // Express app settings
        'key': 'value'
    }
});
```

## Introduction

Amna is a highly opinionated, pre-structured API development platform. It eliminates a lot of the typical repetitive code that is found in many Node.js API projects. Amna combines the following packages into one cohesive framework, and wraps commonly used functionality:

- Express 4
- Passport
- Mongoose
    - Find or Create Plugin
    - Text Search Plugin
    - Types
- EJS Templates
- Jade Templates (coming soon)
- Static Server

## Terminology

#### Thing

An `amna.thing` is an object model containing a schema, and various helper methods. Things are available at `amna.things.*` after registration.

Things are registered by a call to `amna.registerThings(['thing_name'])`, which loads `amna.$THINGS_DIR/thing_name.js` - by default set to `./amna_things` relative to your project's root folder. You can change this path (not recommended) by setting `amna.$THINGS_DIR = 'some_things_dir';` in the additional setup section of your app's main file.

#### Service

A service is a globally availible JavaScript object or function, available at `amna.services.*` after registration.

Services are registered by a call to `amna.registerServices(['service_name'])`, which loads `amna.$SERVICES_DIR/service_name.js` - by default set to `./amna_services` relative to your project's root folder. You can change this path (not recommended) by setting `amna.$SERVICES_DIR = 'some_services_dir';` in the additional setup section of your app's main file.

#### Module

A module is a URL route handler, and may be composed of `amna.route`, `amna.controller`, or `amna.collection` types.

Modules are registered by a call to `amna.registerModules(['module_name'])`, which loads `amna.$MODULES_DIR/module_name/module.js` - by default set to `./amna_modules` relative to your project's root folder. You can change this path (not recommended) by setting `amna.$MODULES_DIR = 'some_modules_dir';` in the additional setup section of your app's main file.

## Example Projects

*Coming soon...*

## Documentation

> Technical Note: to regenerate the following section, run `node ./dev/docs`

<!-- -toc- -->
#### Table of Contents

- [Documentation Home](../../#documentation)
- `lib`
    - [`$express`](docs/lib/$express.md#amnaexpress)
    - [`authentication-facebook`](docs/lib/authentication-facebook.md#amnaauthentication-facebook)
    - [`authentication-google`](docs/lib/authentication-google.md#amnaauthentication-google)
    - [`authentication`](docs/lib/authentication.md#amnaauthentication)
    - [`cache`](docs/lib/cache.md#amnacache)
    - [`collection`](docs/lib/collection.md#amnacollection)
    - [`controller`](docs/lib/controller.md#amnacontroller)
    - [`err`](docs/lib/err.md#amnaerr)
    - [`get`](docs/lib/get.md#amnaget)
    - [`interaction`](docs/lib/interaction.md#amnainteraction)
    - [`mongo`](docs/lib/mongo.md#amnamongo)
    - [`refs`](docs/lib/refs.md#amnarefs)
    - [`registerModules`](docs/lib/registerModules.md#amnaregistermodules)
    - [`registerServices`](docs/lib/registerServices.md#amnaregisterservices)
    - [`registerThings`](docs/lib/registerThings.md#amnaregisterthings)
    - [`responses`](docs/lib/responses.md#amnaresponses)
    - [`route`](docs/lib/route.md#amnaroute)
    - [`services`](docs/lib/services.md#amnaservices)
    - [`set`](docs/lib/set.md#amnaset)
    - [`stack`](docs/lib/stack.md#amnastack)
    - [`start`](docs/lib/start.md#amnastart)
    - [`static`](docs/lib/static.md#amnastatic)
    - [`thing`](docs/lib/thing.md#amnathing)
    - [`things`](docs/lib/things.md#amnathings)
    - [`types`](docs/lib/types.md#amnatypes)

<!-- - -->