Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/feathersjs-ecosystem/feathers-nedb
A service using NeDB, an embedded datastore for Node.js
https://github.com/feathersjs-ecosystem/feathers-nedb
feathers-service-adapter feathersjs nedb
Last synced: 3 months ago
JSON representation
A service using NeDB, an embedded datastore for Node.js
- Host: GitHub
- URL: https://github.com/feathersjs-ecosystem/feathers-nedb
- Owner: feathersjs-ecosystem
- License: mit
- Created: 2015-06-09T22:15:19.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-07-01T01:02:45.000Z (4 months ago)
- Last Synced: 2024-07-12T04:36:19.530Z (4 months ago)
- Topics: feathers-service-adapter, feathersjs, nedb
- Language: TypeScript
- Homepage:
- Size: 1.35 MB
- Stars: 83
- Watchers: 8
- Forks: 19
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/contributing.md
- License: LICENSE
Awesome Lists containing this project
- awesome-feathersjs - feathers-nedb - feathers-logo.png) (Plugins / Database)
README
# feathers-nedb
[![Download Status](https://img.shields.io/npm/dm/feathers-nedb.svg?style=flat-square)](https://www.npmjs.com/package/feathers-nedb)
[feathers-nedb](https://github.com/feathersjs-ecosystem/feathers-nedb/) is a database service adapter for [NeDB](https://github.com/seald/nedb), an embedded datastore with a [MongoDB](https://www.mongodb.org/) 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.
```bash
$ npm install --save @seald-io/nedb feathers-nedb
```> **Important:** `feathers-nedb` implements the [Feathers Common database adapter API](https://docs.feathersjs.com/api/databases/common.html) and [querying syntax](https://docs.feathersjs.com/api/databases/querying.html).
## API
### `service(options)`
Returns a new service instance initialized with the given options. `Model` has to be an NeDB database instance.
```js
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](https://github.com/seald/nedb#documentation) 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](https://docs.feathersjs.com/api/events.html#custom-events) sent by this service
- `paginate` (_optional_) - A [pagination object](https://docs.feathersjs.com/api/databases/common.html#pagination) containing a `default` and `max` page size
- `whitelist` (_optional_) - A list of additional query parameters to allow (e.g. `[ '$regex' ]`)
- `multi` (_optional_) - Allow `create` with arrays and `update` and `remove` with `id` null to change multiple items. Can be `true` for all methods or an array of multi methods (e.g. `[ 'remove', 'create' ]`)### params.nedb
When making a [service method](https://docs.feathersjs.com/api/services.html) call, `params` can contain an `nedb` property which allows to pass additional [NeDB options](https://github.com/seald/nedb#updating-documents), for example to allow `upsert`:
```js
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.
```js
// 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
```js
(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`:
```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](http://localhost:3030/messages).
## License
Copyright (c) 2019
Licensed under the [MIT license](LICENSE).