UNPKG

node-red-contrib-objectid

Version:

Node-RED node to create an Object-Id for mongodb operations.

83 lines (65 loc) 1.89 kB
/* MIT License Copyright (c) 2017-2022 Klaus Landsdorf (http://node-red.plus/) */ 'use strict' module.exports = function (RED) { function ObjectIdNode (config) { const ObjectID = require('bson').ObjectID RED.nodes.createNode(this, config) this.name = config.name this.selectedProperty = config.selectedProperty || '_id' const node = this node.on('input', msg => { if (msg.payload === undefined) { return } let propertyValue let newValue if (Array.isArray(msg.payload)) { newValue = msg.payload.forEach(function (entry) { try { propertyValue = entry[node.selectedProperty] || null } catch (e) { node.error(e, msg) } if (propertyValue) { newValue = new ObjectID(propertyValue) } else { newValue = new ObjectID() } if (propertyValue && entry[node.selectedProperty] !== Object(entry[node.selectedProperty])) { entry[node.selectedProperty] = { _id: newValue, value: propertyValue } } else { entry[node.selectedProperty] = newValue } }) } else { try { propertyValue = msg.payload[node.selectedProperty] || null } catch (e) { node.error(e, msg) } if (propertyValue) { newValue = new ObjectID(propertyValue) } else { newValue = new ObjectID() } } if (propertyValue === null) { if (msg.payload !== Object(msg.payload)) { const payload = msg.payload msg.payload = { value: payload } } } msg.payload[node.selectedProperty] = newValue this.send(msg) }) } RED.nodes.registerType('objectid', ObjectIdNode) }