$ npm install --save dbrest
Supported databases: Postgresql and MSSQL.
const {DBRest, Model} = require('dbrest');
const dbrest = new DBRest({
dialect: 'postgresql',
connection: {
server: 'localhost',
port: '5432',
database: 'dbrest',
user: 'postgres',
password: 'postgres'
}
});
await dbrest.connect();
For a basic example, just create a class that extends
Model
.
class Task extends Model {}
dbrest.loadModel(Task);
const router = dbrest.publish();
//attach dbrest routes to your express app
app.use('/', router);
It creates a REST API for CRUD operations.
HTTP Verb | Operation | Route |
---|---|---|
GET | get tasks from database. | /task |
POST | insert a task | /task |
PUT | update a task | /task |
DELETE | delete a task | /task |
Aditional methods
HTTP Verb | Operation | Route |
---|---|---|
GET | get task schema | /task/define |
GET | get task schema and data | /task/fetch |
let's see how to re-define the default methods
class Task extends Model {
//re-define find to add a calculated column `foo`.
async find (params) {
//`addWhereExpress` helps to generate `where` expression based on the request params
const statement = this.addWhereExpress(
`select id, title, status, 'foo' as calculated from Task`,
params
);
return await this.database.query(statement);
}
}
class Task extends Model {
//re-define insert to validate params
async insert (params) {
if (params.status != 'backlog') {
throw new ModelError("a new task must be created with status 'backlog'.")
}
super.insert(param);
}
}
class Task extends Model {
//re-define update to log changes in console
async update (params) {
console.log('[UPDATED] - ' + params);
super.update(params);
}
}
class Task extends Model {
//re-define delete to validate references
async delete (params) {
const id = params.id;
const reference = await this.database.query(`select id from event where taskId = ${id}`);
if (reference) {
throw new ModelError('this record is referenced by ' + reference.id);
}
super.delete(params);
}
}
const dbrest = new DBRest({
dialect: 'mssql',
connection: {
userName: 'admin',
password: 'admin',
server: 'localhost',
options: {
database: 'MyDB',
instanceName: 'SQLSERVEREXPRESS',
rowCollectionOnRequestCompletion: true
}
}
});
Connect to database and create a connections pool.
Required
Type: Object
Javascript class that extends Model.
Required
Type: String
Directory path containing the Models.
Optional
Type: function
Express middleware function.
This project is in development, so be careful and don't use it in production yet.
MIT © Danilo Sampaio