1 | # barbakoa
|
2 |
|
3 | Fullstack framework based on [Koa](http://koajs.com/)
|
4 |
|
5 | See [axelhzf/barbakoa-base-app](https://github.com/axelhzf/barbakoa-base-app) for usage example.
|
6 |
|
7 | ## Create an application
|
8 |
|
9 | ```js
|
10 | var barbakoa = require("barbakoa");
|
11 | var app = new barbakoa();
|
12 | app.start();
|
13 | ```
|
14 |
|
15 | ## Router
|
16 |
|
17 | Barbakoa uses [koa-router](https://github.com/alexmingoia/koa-router) internally. The router is exposed via `barbakoa.router`.
|
18 |
|
19 | ```js
|
20 | var router = barbakoa.router;
|
21 | router.get("/", function* () {
|
22 | this.body = "Hello world";
|
23 | }
|
24 | ```
|
25 |
|
26 | ## ORM
|
27 |
|
28 | Barbakoa uses [Sequelize](https://github.com/sequelize/sequelize) for persistence.
|
29 |
|
30 | Models defined in the folder `app/server/models/` are auto initialized.
|
31 |
|
32 | ### Define a model
|
33 |
|
34 | ```js
|
35 | var db = require("barbakoa").db;
|
36 |
|
37 | module.exports = db.define("User", {
|
38 | name: db.types.STRING,
|
39 | password: db.types.STRING
|
40 | });
|
41 | ```
|
42 |
|
43 | [Supported types](http://sequelizejs.com/docs/latest/models#data-types)
|
44 |
|
45 | Custom types:
|
46 |
|
47 | * `db.types.URL` : `db.types.STRING(2000)`
|
48 |
|
49 | ### Model usage
|
50 |
|
51 | ```js
|
52 | var User = require("./models/User");
|
53 | var router = require("barbakoa").router;
|
54 |
|
55 | router.get("/api/users", function* () {
|
56 | var users = yield User.findAll();
|
57 | this.body = {users: users};
|
58 | });
|
59 | ```
|
60 |
|
61 | ## Request parsing and validation
|
62 |
|
63 | ```js
|
64 | var router = require("barbakoa").router;
|
65 | var Joi = require("joi")
|
66 |
|
67 | var idSchema = Joi.object().keys({
|
68 | id: Joi.number().integer().min(0).required()
|
69 | });
|
70 |
|
71 | router.get("/api/users/:id", function* () {
|
72 | var params = yield this.validateParams(idSchema);
|
73 | this.body = yield User.find(params.id)
|
74 | });
|
75 |
|
76 | ```
|
77 |
|
78 | Methods:
|
79 |
|
80 | * `ctx.validateParams(schema)` : validates ctx.params
|
81 | * `ctx.validateQuery(schema)` : validates ctx.query
|
82 | * `ctx.validateBody(schema)` : validates ctx.body
|
83 |
|
84 |
|
85 | ## Configuration¡
|
86 |
|
87 | Barbakoa uses [node-config](https://github.com/lorenwest/node-config)
|
88 |
|
89 | ## Events
|
90 |
|
91 | ```js
|
92 | barbakoa.on("post-start", function* () {
|
93 |
|
94 | });
|
95 | ```
|
96 |
|
97 | Events:
|
98 |
|
99 | * **pre-start**
|
100 | * **post-start**
|
101 |
|
102 |
|
103 | ## Gulp
|
104 |
|
105 | Barbakoa comes with several gulp tasks defined.
|
106 |
|
107 | Define your `gulpfile` like this to import these tasks
|
108 |
|
109 | ```js
|
110 | var gulp = require("gulp");
|
111 | require("barbakoa/gulptasks")(gulp);
|
112 | ```
|
113 |
|
114 | Tasks:
|
115 |
|
116 | * `less` : less + autoprefixer
|
117 | * `jade` : client side templating
|
118 | * `es6` : es6to5 transformation
|
119 | * `clean`
|
120 | * `build`
|
121 | * `default` : clean + build
|
122 |
|
123 | ## Cli
|
124 |
|
125 | * `barbakoa dev` : Run app in dev mode. Gulp watch and nodemon for server restart
|
126 | * `barbakoa test` : Run client and server test
|
127 | * `barbakoa test-client`
|
128 | * `barbakoa test-server` |
\ | No newline at end of file |