UNPKG

2.44 kBMarkdownView Raw
1# barbakoa
2
3Fullstack framework based on [Koa](http://koajs.com/)
4
5See [axelhzf/barbakoa-base-app](https://github.com/axelhzf/barbakoa-base-app) for usage example.
6
7## Create an application
8
9```js
10var barbakoa = require("barbakoa");
11var app = new barbakoa();
12app.start();
13```
14
15## Router
16
17Barbakoa uses [koa-router](https://github.com/alexmingoia/koa-router) internally. The router is exposed via `barbakoa.router`.
18
19```js
20var router = barbakoa.router;
21router.get("/", function* () {
22 this.body = "Hello world";
23}
24```
25
26## ORM
27
28Barbakoa uses [Sequelize](https://github.com/sequelize/sequelize) for persistence.
29
30Models defined in the folder `app/server/models/` are auto initialized.
31
32### Define a model
33
34```js
35var db = require("barbakoa").db;
36
37module.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
45Custom types:
46
47* `db.types.URL` : `db.types.STRING(2000)`
48
49### Model usage
50
51```js
52var User = require("./models/User");
53var router = require("barbakoa").router;
54
55router.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
64var router = require("barbakoa").router;
65var Joi = require("joi")
66
67var idSchema = Joi.object().keys({
68 id: Joi.number().integer().min(0).required()
69});
70
71router.get("/api/users/:id", function* () {
72 var params = yield this.validateParams(idSchema);
73 this.body = yield User.find(params.id)
74});
75
76```
77
78Methods:
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
87Barbakoa uses [node-config](https://github.com/lorenwest/node-config)
88
89## Events
90
91```js
92barbakoa.on("post-start", function* () {
93
94});
95```
96
97Events:
98
99* **pre-start**
100* **post-start**
101
102
103## Gulp
104
105Barbakoa comes with several gulp tasks defined.
106
107Define your `gulpfile` like this to import these tasks
108
109```js
110var gulp = require("gulp");
111require("barbakoa/gulptasks")(gulp);
112```
113
114Tasks:
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