feathers-nedb v7.0.1
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-nedbImportant:
feathers-nedbimplements 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_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' ])
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 nedbIn 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.
2 years ago
2 years ago
4 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago