Coder Social home page Coder Social logo

proto-db's Introduction

ProtoDB

What is ProtoDB   |   Why ProtoDB   |   Usage   |   API

What is ProtoDB

Proto is a small Node.js tool to persist a JavaScript object to disk.

Why ProtoDB

At the early prototyping phase of several projects, we were too lazy to set up a proper database and instead we used a JavaScript object and persisted it by reading & writing JSON to disk.

We expected that our approach wouldn't survive long and that we would soon need to replace our lazy hack with a real database. But, and to our biggest surprise, we got quite far until we had to use a real database.

Proto is only ~40 lines of code (/index.js), so you can easily modify it and write your own implementation.

We actually encourage you to write your own implementation; ProtoDB is a cheering message that the technique of using JSON and the filesystem can be a great alternative to a database for prototypes and small to medium-sized apps. You may not use Proto but you may want to consider this technique.

Usage

Idiomatic usage example:

// /example/db/index.js

const proto = require('@brillout/proto-db'); // npm install @brillout/proto-db

const data = proto.load(__dirname+'/data.json', {todos: []});

module.exports = {createTodo, getAllTodos};

async function createTodo({text}) {
  const id = proto.getUUID();
  const newTodo = {id, text};

  data.todos.push(newTodo);

  await data._save();
}

function getAllTodos() {
  return data.todos;
}
// /example/index.js

const db = require('./db');

run();

async function run() {
  await db.createTodo({text: 'Buy Milk'});

  const todos = db.getAllTodos();
  console.log(todos);
}

Which prints:

$ node example/
[ { id: 430557952207, text: 'Buy Milk' } ]

The new todo item is saved as JSON in data.json:

$ cat example/db/data.json
{"todos":[{"id":199451513185,"text":"Buy Milk"}]}

API

  • const data = proto.load(databaseFile, defaultValue) loads and returns the JavaScript object saved at databaseFile. If there is no file at databaseFile then defaultValue is used. The proto.load function is synchronous.
  • await data._proto.save() saves data to the disk at the path databaseFile you provided when running const data = proto.load(databaseFile).
  • proto.getUUID() generates and returns a universally unique ID.

proto-db's People

Contributors

brillout avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.