Socket
Socket
Sign inDemoInstall

dbrest

Package Overview
Dependencies
5
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    dbrest

DBRest simplifies the publishing of rest API from (very) simple SQL Models.


Version published
Weekly downloads
2
decreased by-85.71%
Maintainers
1
Install size
7.13 MB
Created
Weekly downloads
 

Readme

Source

DBRest

Install

$ npm install --save dbrest

Connection

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();

Database table example

Task

Define your Model

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);

Result

It creates a REST API for CRUD operations.

HTTP VerbOperationRoute
GETget tasks from database./task
POSTinsert a task/task
PUTupdate a task/task
DELETEdelete a task/task

Aditional methods

HTTP VerbOperationRoute
GETget task schema/task/define
GETget task schema and data/task/fetch

Customize Model methods (find, insert, update, delete)

let's see how to re-define the default methods

find
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);
	}
}
insert
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);
	}
}
update
class Task extends Model {

	//re-define update to log changes in console
	async update (params) {

		console.log('[UPDATED] - ' + params);
		super.update(params);
	}
}
delete
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);
	}
}

MSSQL connection example

const dbrest = new DBRest({
	dialect: 'mssql',
	connection: {
		userName: 'admin',
		password: 'admin',
		server: 'localhost',
		options: {
		  database: 'MyDB',
		  instanceName: 'SQLSERVEREXPRESS',
		  rowCollectionOnRequestCompletion: true
		}
	}
});

API

connect()

Connect to database and create a connections pool.

loadModel(model)

model

Required
Type: Object

Javascript class that extends Model.

loadFrom(modelsDir)

modelsDir

Required Type: String

Directory path containing the Models.

publish(middleware)

middleware

Optional Type: function

Express middleware function.

Warning

This project is in development, so be careful and don't use it in production yet.

License

MIT © Danilo Sampaio

Keywords

FAQs

Last updated on 26 Aug 2019

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc