Awesome
feathers-nedb
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-nedb
implements the Feathers Common database adapter API and querying syntax.
API
service(options)
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_id
property.events
(optional) - A list of custom service events sent by this servicepaginate
(optional) - A pagination object containing adefault
andmax
page sizewhitelist
(optional) - A list of additional query parameters to allow (e.g.[ '$regex' ]
)multi
(optional) - Allowcreate
with arrays andupdate
andremove
withid
null to change multiple items. Can betrue
for all methods or an array of multi methods (e.g.[ 'remove', 'create' ]
)
params.nedb
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 },
}
);
use of params on client
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;
};
Example
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.
License
Copyright (c) 2019
Licensed under the MIT license.