feathers-nedb is a database service adapter for NeDB, an embedded datastore with a MongoDB like API. NeDB can store data in-memory or on the filesystem which makes it useful as a persistent storage without a separate database server.
$ npm install --save @seald-io/nedb feathers-nedb
Important:
feathers-nedbimplements the Feathers Common database adapter API and querying syntax.
Returns a new service instance initialized with the given options. Model has to be an NeDB database instance.
const NeDB = require("@seald-io/nedb"); const service = require("feathers-nedb"); // Create a NeDB instance const Model = new NeDB({ filename: "./data/messages.db", autoload: true, }); app.use("/messages", service({ Model })); app.use("/messages", service({ Model, id, events, paginate }));
Options:
Model(required) - The NeDB database instance. See the NeDB API for more information.id(optional, default:'_id') - The name of the id field property. By design, NeDB will always add an_idproperty.events(optional) - A list of custom service events sent by this servicepaginate(optional) - A pagination object containing adefaultandmaxpage sizewhitelist(optional) - A list of additional query parameters to allow (e.g.[ '$regex' ])multi(optional) - Allowcreatewith arrays andupdateandremovewithidnull to change multiple items. Can betruefor all methods or an array of multi methods (e.g.[ 'remove', 'create' ])
When making a service method call, params can contain an nedb property which allows to pass additional NeDB options, for example to allow upsert:
app.service("messages").update( "someid", { text: "This message will be either created or updated", }, { nedb: { upsert: true }, } );
On client you can't pass anything other than a query as the parameter. So you need to do it like this.
// client side app.service("messages").update( "someid", { text: "This message will be either created or updated", }, { query: { nedb: { upsert: true } }, } );
then add a hook to the service to move the nedb options to the params object
(ctx) => { const nedb = ctx.params.query.nedb; if (nedb) { ctx.params.nedb = nedb; delete ctx.params.query.nedb; } return ctx; };
Here is an example of a Feathers server with a messages NeDB service that supports pagination and persists to db-data/messages:
$ npm install @feathersjs/feathers @feathersjs/errors @feathersjs/express @feathersjs/socketio feathers-nedb nedb
In app.js:
const feathers = require("@feathersjs/feathers"); const express = require("@feathersjs/express"); const socketio = require("@feathersjs/socketio"); const NeDB = require("@seald-io/nedb"); const service = require("feathers-nedb"); const db = new NeDB({ filename: "./db-data/messages", autoload: true, }); // Create an Express compatible Feathers application instance. const app = express(feathers()); // Turn on JSON parser for REST services app.use(express.json()); // Turn on URL-encoded parser for REST services app.use(express.urlencoded({ extended: true })); // Enable REST services app.configure(express.rest()); // Enable Socket.io services app.configure(socketio()); // Connect to the db, create and register a Feathers service. app.use( "/messages", service({ Model: db, paginate: { default: 2, max: 4, }, }) ); // Set up default error handler app.use(express.errorHandler()); // Create a dummy Message app .service("messages") .create({ text: "Message created on server", }) .then((message) => console.log("Created message", message)); // Start the server. const port = 3030; app.listen(port, () => { console.log(`Feathers server listening on port ${port}`); });
Run the example with node app and go to localhost:3030/messages.
Copyright (c) 2019
Licensed under the MIT license.