UNPKG

prisme-flow

Version:

prisme platform flow engine

76 lines (70 loc) 2.39 kB
/** * Created by prisme.io on 09/06/2017. */ module.exports = function (RED) { 'use strict' var lvldb = require('level') function LevelNode (n) { RED.nodes.createNode(this, n) this.dbname = n.db this.ready = false var node = this lvldb(this.dbname, function (err, db) { if (err) { node.error(err) } node.db = db node.db.on('ready', function () { node.ready = true }) node.db.on('closing', function () { node.ready = false }) }) node.on('close', function () { if (node.db) { node.ready = false node.db.close() } }) } RED.nodes.registerType('leveldbase', LevelNode) function LevelDBNodeIn (n) { RED.nodes.createNode(this, n) this.level = n.level this.levelConfig = RED.nodes.getNode(this.level) var node = this node.on('input', function (msg) { if (node.levelConfig && node.levelConfig.ready) { var key = msg.topic.toString() if (key && (key.length > 0)) { node.levelConfig.db.get(msg.topic, function (err, value) { if (err) { // node.warn(err); // for some reason they treat nothing found as an error... msg.payload = null // so we should return null } else { msg.payload = value } node.send(msg) }) } else { node.error('Cannot make key string from msg.topic') } } else { node.error('Database not ready', msg) } }) } RED.nodes.registerType('leveldb in', LevelDBNodeIn) function LevelDBNodeOut (n) { RED.nodes.createNode(this, n) this.level = n.level this.operation = n.operation this.levelConfig = RED.nodes.getNode(this.level) var node = this node.on('input', function (msg) { if (node.levelConfig && node.levelConfig.ready) { var key = msg.topic.toString() if (key && (key.length > 0)) { if (node.operation === 'delete') { node.levelConfig.db.del(msg.topic) } else { node.levelConfig.db.put(msg.topic, msg.payload, function (err) { if (err) { node.error(err, msg) } }) } } else { node.error('Cannot make key string from msg.topic', msg) } } else { node.error('Database not ready', msg) } }) } RED.nodes.registerType('leveldb out', LevelDBNodeOut) }