# HORESE GENERATOR

   Opinionated. minimalist and  restful api structure for web framework, such as [koa](http://koajs.com), express . Inspired by [express-generator](https://github.com/expressjs/generator) and [generator-angular-fullstack](https://github.com/angular-fullstack/generator-angular-fullstack).
  

## Quick Start

 The quickest way to get started with a koa app is to utilize the executable `horse` to generate an application as shown below:

 Create the app:

```sh
npm install -g horse
horse /projects/hello-horse && cd /projects/hello-horse
```

 Install dependencies:

```sh
npm install
```


## Options

 - `-t, --theme [name]` switch application theme to <name> [white|green|violet|red]. Defaults to red.
 - `-d, --db [engine]`  change database <engine> to one of [mysql|postgresql|mongo|redis|memory|disk]. Defaults to disk.
 - `-c, --css [engine]`  add stylesheet <engine> support [sass|plain]. Defaults to plain css.
 - `-a, --auth [type]`  add [type] authentication support [qq|wechat|local]. Defaults to local only.
   Use ":" as separator for multiples (f.x. local:qq:wechat). Set to `false` to disable (like `horse ... -a false`).
 - `-e, --template [engine]`  change template engine. Support [ejs] only for now. Defaults to ejs.
 - `-i, --i18n`  add i18n support. Translations used by [i18n-node-2](https://github.com/jeresig/i18n-node-2) ported to [koa-i18n](https://github.com/fundon/koa-i18n)
 - `-S, --no-session`  remove [session](https://github.com/koajs/generic-session) support. Session is enabled by default.
 - `-f, --force`  force on non-empty directory

   Example using layout green, mysql as db, qq and wechat authentication:

```sh
horse new-horse -t green -a local:qq:wechat
cd new-horse
npm install
node bin/www
```

Go to [http://localhost:3006](http://localhost:3006) and have fun hacking

## show me something

green with  auth  
`horse myapp -t green -a qq:wechat`:  
  
## Structure

+ `app`
+ - `controller` plain objects to use its methods as routes
+ - `model` uses [mongoose](https://github.com/Automattic/mongoose)
+ - `proxy`
+ - `view` templates
+ - - `error` error views (401,403,404,error)
+ - - `layouts` layouts folder (main, error)
+ - - `site` application views (index, login)
+ `auth` authentication and authorization methods
+ - `local`
+ - `qq`
+ `config`  routes, general app env
+ - `env`
+ `locales` if i18n option is set
+ `public` public folder
+ - `css`
+ - `img`
+ - `js`
+ `middleware`
+ `util`

## Uses

+ [koa](http://koajs.com) (obviously)
+ [ejs](https://github.com/koajs/ejs) EJS as view engine

Also

+ [koa-bodyparser](https://github.com/koajs/body-parser) to handle post data easier
+ [koa-static](https://github.com/koajs/static) exposes assets (js e css)
+ [koa-router](https://github.com/alexmingoia/koa-router) you know, for routes

Optional
+ [koa-generic-session](https://github.com/koajs/generic-session) if has session support
+ [koa-flash](https://github.com/rickharrison/koa-flash) for session flash messages
+ [koa-locale](https://github.com/fundon/koa-locale) if option i18n is set
+ [koa-i18n](https://github.com/fundon/koa-i18n) if option i18n is set

## Roadmap


## Notes

```
$ npm install -g n
$ n 8.0.0
```
