JSON-SyncDB is a lightweight, zero-dependency Node.js library that provides a simple, file-based database solution for small projects. It uses a JSON file as a data store and automatically synchronizes any changes to an in-memory object back to the file.
- Simple API: Easy to get started with minimal setup.
- Automatic Synchronization: Changes to the data object are instantly written to the JSON file.
- Zero Dependencies: Lightweight and easy to integrate.
- Human-Readable Option: Can format the JSON output for easy inspection.
npm install json-syncdbFirst, import the JSONDB class and create a new instance. If the specified JSON file doesn't exist, it will be created automatically.
const { JSONDB } = require("json-syncdb");
// Create a new database instance, linked to './db.json'
const db = new JSONDB("./db.json");
// To create a human-readable (indented) JSON file, pass `true` as the second argument:
// const db_readable = new JSONDB("./db_readable.json", true);All data is accessed and manipulated through the db.data property. Any modification (adding, updating, or deleting properties) is automatically saved to the corresponding JSON file.
const { JSONDB } = require("json-syncdb");
// Initialize the database with a readable format
var db = new JSONDB("./users.json", true);
// Check if data exists, if not, initialize it
if (!db.data.users) {
db.data.users = [];
console.log("Initialized users array.");
}
// Add a new user object to the array
db.data.users.push({ id: 1, name: "Alice", age: 30 });
console.log("Added Alice.");
// The 'users.json' file is now automatically updated.
// Add another user
db.data.users.push({ id: 2, name: "Bob", age: 25 });
console.log("Added Bob.");
// Update data
const userToUpdate = db.data.users.find(user => user.id === 1);
if (userToUpdate) {
userToUpdate.age = 31; // This change triggers a file write
console.log("Updated Alice's age.");
}
// Add a new top-level property
db.data.settings = { theme: "dark" };
console.log("Added settings.");After running the code above, the users.json file will contain:
{
"users": [
{
"id": 1,
"name": "Alice",
"age": 31
},
{
"id": 2,
"name": "Bob",
"age": 25
}
],
"settings": {
"theme": "dark"
}
}Creates a new database instance.
filePath(String, Optional): The path to the JSON file you want to use for storage. Default:'./data.json'.readable(Boolean, Optional): Iftrue, the JSON file will be written in a human-readable, indented format. Default:false.
The library loads the JSON file content into an object upon initialization. This object is then wrapped in a recursive JavaScript Proxy. The proxy's set handler intercepts any property assignments, and upon each change, it rewrites the entire data object to the specified JSON file using fs.writeFileSync.
This project is licensed under the MIT License. See the LICENSE file for details.