I just want to create a new node with multiple inputs. This node will:
show multiple inputs' ports;
generate {node_id: output_name} in its json,when linked with other node's output.
Node-RED doesn't support multiple input ports
I mean rewriting codes to support it.
Just to clarify... you want to rewrite the entire node-red runtime and editor to support multiple inputs? Something we've said repeatedly (if you search the forum) is not supported?
You'll forgive me if, at a time we're focussed on getting 1.0 released, that I don't spend a day writing out everything that would need to be changed to do that.
Supporting only one input was a fundamental design choice (and a good one, IMO), otherwise the flow engine would have to be a lot more complex.
There was a nice discussion about this topic a while ago here:
The function example with 2 inputs to do a Division is not a good example as to why multiple-inputs would be beneficial (each input receives messages potentially at different time while the function would need access to both parameters simultaneously - a JOIN node does the trick for that).
However, here's a good (IMHO) reason to consider implementing multiple node inputs in the future (I understand that it's not a simple, localized change, so I imagine it would be a distant future, but I can help with this task):
- Collapse a Group into a single box/node/subflow - currently a group may have multiple links on either side (ins and outs) as there could be multiple wires leading to it. Once converted to a subflow, it would require each message to be identifiable by topic or otherwise (to avoid collision when directing all inputs to a single port) and a split node inside the subflow to extract each input ...
- Building a complex flow is quite messy right now as not everything can be done with subflows (although, I hope that single-instance subflows / nodes will be eventually implemented) - for example, I can't link to a subflow element, all inputs have to go through a single port - quite a mess to figure it all out. Object-oriented-like flows would allow for complex nodes to be defined on separate tabs (as 'subflows' or 'classes') and shown on the main flow as a single box with multiple inputs/outputs, possibly with a multi-line label that I'd also like to see). This nesting could be hierarchical, building a complex machinery from smaller and smaller blocks.
- Multiple inputs could be implement as simply as supplying an array of messages on the current single port - similar to how send([...]) allows to address multiple outputs. Perhaps that would be enough to do the trick + visual layout of course?