Skip to content
This repository has been archived by the owner on Dec 5, 2022. It is now read-only.

Initialize Database #55

Merged
merged 5 commits into from
Nov 19, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 21 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,35 +59,27 @@ var app = feathers()
.use(bodyParser.json())
// Turn on URL-encoded parser for REST services
.use(bodyParser.urlencoded({extended: true}));

// Create your database if it doesn't exist.
r.dbList().contains('feathers')
.do(dbExists => r.branch(dbExists, {created: 0}, r.dbCreate('feathers'))).run()

// Create the table if it doesn't exist.
.then(() => {
return r.db('feathers').tableList().contains('messages')
.do(tableExists => r.branch( tableExists, {created: 0}, r.tableCreate('messages'))).run();
})

// Create and register a Feathers service.
.then(() => {
app.use('messages', service({
Model: r,
name: 'messages',
paginate: {
default: 10,
max: 50
}
}));
})
.catch(err => console.log(err));

// Start the server.
var port = 3030;
app.listen(port, function() {
console.log(`Feathers server listening on port ${port}`);
});

var messages = service({
Model: r,
name: 'messages',
paginate: {
default: 10,
max: 50
}
}))

messages
.init()
.then(() => {
// mount the service
app.use('messages', messages);
// start the server.
const port = 3030;
app.listen(port, function() {
console.log(`Feathers server listening on port ${port}`);
});
})
```

You can run this example by using `node example/app` and going to [localhost:3030/messages](http://localhost:3030/messages). You should see an empty array. That's because you don't have any Todos yet but you now have full CRUD for your new messages service.
Expand Down
28 changes: 10 additions & 18 deletions example/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,6 @@ const r = rethink({
db: 'feathers'
});

r.db('feathers').tableList().contains('todos')
.do(function (tableExists) {
return r.branch(
tableExists, {
created: 0
},
r.db('feathers').tableCreate('todos')
);
}).run();

let counter = 0;
const todoService = service({
Model: r,
Expand Down Expand Up @@ -58,11 +48,13 @@ let app = feathers()
// Turn on URL-encoded parser for REST services
.use(bodyParser.urlencoded({
extended: true
}))
.use('/todos', todoService);

// Start the server.
const port = 3030;

// require('http').createServer();
module.exports = app.listen(port);
}));

module.exports = todoService
.init()
.then(() => {
// mount the service
app.use('/todos', todoService);
// start the server
return app.listen(3030);
});
13 changes: 13 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,19 @@ class Service {
return Proto.extend(obj, this);
}

init (opts = {}) {
let r = this.options.r;
let t = this.options.name;
let db = this.options.r._poolMaster._options.db;

return r.dbList().contains(db) // create db if not exists
.do(dbExists => r.branch(dbExists, {created: 0}, r.dbCreate(db))).run()
.then(() => {
return r.db(db).tableList().contains(t) // create table if not exists
.do(tableExists => r.branch(tableExists, {created: 0}, r.tableCreate(t))).run();
});
}

createFilter (query) {
return createFilter(query, this.options.r);
}
Expand Down
27 changes: 23 additions & 4 deletions test/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,29 @@ describe('feathers-rethinkdb', () => {
});

describe('RethinkDB service example test', () => {
let server;

before(() => (server = require('../example/app')));
after(done => server.close(() => done()));
before(done => {
let server = require('../example/app');
server.then((s) => {
after(done => s.close(() => done()));
done();
});
});

example('id');
});

describe('init database', () => {
it('service.init() initializes the database', done => {
service({ Model: r, name: 'testTable' })
.init()
.then(() => {
expect(r.tableList().contains('testTable'));
r.table('testTable').delete(null).run()
.then(() => {
return done();
})
.catch(done);
})
.catch(done);
});
});