Skip to content

Commit

Permalink
chore: place package at root, and main project to playground
Browse files Browse the repository at this point in the history
  • Loading branch information
becem-gharbi committed May 23, 2023
1 parent bc40895 commit 5fa3297
Show file tree
Hide file tree
Showing 25 changed files with 9,004 additions and 9,004 deletions.
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
node_modules/
.env
dist/
app.yaml
.gcloudignore
stats.md
101 changes: 78 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,45 +1,100 @@
# Node Red Unstorage

Node-RED is a programming tool for wiring together hardware devices, APIs and online services via a browser-based editor. By default the data is stored on local file-system. However, Node RED provides a storage API allowing custom integrations.
Node-RED is a programming tool for wiring together hardware devices, APIs and online services via a browser-based editor.

This project aims to embed and run a Node Red instance on a Node.js application suitable for stateless deployment. This is done by implementing a storage plugin based on [unstorage](https://unstorage.unjs.io/) library. Thus allowing a flexible storage layer that can run on file-system, Mongo DB and a variety of key-value storage platforms.
Unstorage is a universal key-value storage library. It supports multiple storage platform: filesystem, database, localStorage and [more](https://unstorage.unjs.io/).

This package is a Node-RED storage plugin that enables the integration with `unstorage`. It implements a `storageModule` for storing flows, settings, sessions and library content. Plus a `contextStorage` for storing context data. Ultimately, the goal is to create a platform agnostic storage layer for Node RED.

## Setup

Make sure to install the dependencies:
Make sure to install the dependency:

```bash
# yarn
yarn install
npm i @bg-dev/node-red-unstorage
```

# npm
npm install
## Usage

# pnpm
pnpm install
```
Below, a Node-Red instance is embedded in a node.js application. Mongo DB is is used for storage layer.

## Development Server
```js
// Supports ESM and CJS
import storage from "@bg-dev/node-red-unstorage";

Start the development server on `http://localhost:8080`
import * as dotenv from "dotenv";
import express from "express";
import { createServer } from "http";
import nodered from "node-red";
import { dirname, resolve } from "path";
import { fileURLToPath } from "url";
import mongodbDriver from "unstorage/drivers/mongodb";

```bash
npm run dev
```
dotenv.config();

## Production
const { contextStore, storageModule } = storage({
// A namespace for the storage layer
// Allows creating multiple projects with isolated data access
app: "app0",

Build the application for production:
// Unstorage instance options, for storageModule (required)
storageOptions: {
driver: mongodbDriver({
connectionString: process.env.MONGO_DB_URL,
databaseName: "nodeRed",
collectionName: "storage",
}),
},

```bash
npm run build
```
// Unstorage instance options, for contextStore (optional)
contextOptions: {
driver: mongodbDriver({
connectionString: process.env.MONGO_DB_URL,
databaseName: "nodeRed",
collectionName: "context",
}),
},
});

Run the production build:
const cwd = dirname(fileURLToPath(import.meta.url));

```bash
npm run start
const settings = {
httpAdminRoot: "/",
httpNodeRoot: "/api",
// The userDir contains the external libraries
// Should be at the project root
userDir: cwd,
nodesDir: resolve(cwd, "nodes"),
uiHost: "0.0.0.0",
uiPort: parseInt(process.env.PORT) || 8080,

storageModule: storageModule,

contextStorage: {
unstorage: {
module: contextStore,
},
},
};

// Express is used as suggested in Node-Red docs
const app = express();

const server = createServer(app);

app.use("/", express.static("public"));

nodered.init(server, settings);

app.use(settings.httpAdminRoot, nodered.httpAdmin);

app.use(settings.httpNodeRoot, nodered.httpNode);

server.listen(settings.uiPort);

nodered.start();
```
## Credits
- [@hardillb](https://github.com/hardillb) - node-red-contrib-storage-mongodb
Loading

0 comments on commit 5fa3297

Please sign in to comment.