Node-RED: Aan de slag

Hoe te beginnen met Node-RED

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare Node-RED cloud oplossing met tal van voordelen, waaronder:

  • MQTT server inbegrepen (Mosquitto).
  • Volledige toegang tot de Node-RED admin UI.
  • Node-RED Dashboard inbegrepen.
  • Onbeperkte en toegewijde SMTP e-mailserver inbegrepen.
  • Moeiteloze updates met slechts één klik.
  • Aanpasbare domeinnaam beveiligd met HTTPS (bijvoorbeeld, https://node-red.your-company.com).
  • Optimale prestaties en robuuste beveiliging aangedreven door een privé en toegewijde VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Node-RED cloud hosting oplossing van Stackhero te proberen!

Elke Node-RED-instantie op Stackhero wordt geleverd met een eigen toegewijde e-mailserver. Deze server stelt u in staat om onbeperkt e-mailmeldingen te verzenden met slechts een paar klikken.

Om te beginnen met het verzenden van e-mails vanuit uw Node-RED-instantie, voegt u een "email"-node toe aan uw flow. U zult twee e-mailnodes opmerken in de nodelijst. Kies degene met het mailpictogram aan de rechterkant. Zodra deze is toegevoegd, wordt de node automatisch "Stackhero integrated email server" genoemd en is vooraf geconfigureerd.

Dubbelklik op de e-mailnode en voer uw e-mailadres in het veld "To:" in. Het is het beste om de rest van de instellingen ongewijzigd te laten.

Voeg vervolgens een "inject"-node toe aan uw flow en verbind deze met de e-mailnode. Dubbelklik op de injectnode (standaard "timestamp" genoemd), selecteer "string" als payloadtype en voer "This is an email from Node-RED" in als payload.

Controleer uw nodeconfiguraties, implementeer uw flow en klik op het actie-icoon op de injectnode. Controleer vervolgens uw e-mailinbox om de e-mail te bekijken die vanuit Node-RED is verzonden!

Tip: U kunt e-mails naar meerdere ontvangers verzenden door elk e-mailadres te scheiden met een puntkomma in het veld "To:".

In Node-RED-functies resulteert het direct proberen te gebruiken van een Node.js native module in de foutmelding ReferenceError: require is not defined. Dit komt omdat Node-RED het niet toestaat om een Node.js-module direct binnen een functie te gebruiken.

Om dit op te lossen, zijn deze modules geïntegreerd in de globale context van Node-RED. U kunt er toegang toe krijgen met context.global.

Als u bijvoorbeeld de crypto-module nodig heeft, declareert u deze als volgt:

const { crypto } = context.global;

De volgende Node.js-modules zijn beschikbaar: util, buffer, child_process, crypto, fs, os, http, http2, https, en zlib.

We hebben een node ontwikkeld om verbinding te maken met een MySQL-server die volledig compatibel is met het nieuwe authenticatiesysteem van MySQL 8, "Caching SHA2 Password", evenals met MariaDB.

MySQL/MariaDB nodeMySQL/MariaDB node

Voor meer details, bezoek de officiële repository. Om deze node op uw Node-RED-instantie te installeren, zoekt u eenvoudig naar stackhero in de sectie Beheer palet van uw Node-RED-dashboard.

We bieden een node die is ontworpen om verbinding te maken met een InfluxDB v2-database. Deze node stelt u in staat om gegevens te schrijven en queries uit te voeren met behulp van de Flux-taal.

InfluxDb-v2 nodeInfluxDb-v2 node

Aanvullende informatie is beschikbaar op de officiële repository. Om het toe te voegen aan uw Node-RED-instantie, zoekt u naar stackhero in de sectie Beheer palet.

Soms kunnen nodes fouten genereren. Een praktische oplossing is om een "catch all debug"-flow op te zetten om deze fouten te monitoren.

Voorbeeld van een Node-RED-foutopvangerVoorbeeld van een Node-RED-foutopvanger

Om dit op te zetten, voegt u een catch-node toe en verbindt u deze met een debug-node. Configureer de debug-node om het volledige msg-object uit te voeren. Deze configuratie logt elke fout die in de flow wordt gegenereerd naar het Node-RED-debugvenster.

Voorbeeld van een opgevangen Node-RED-nodefoutVoorbeeld van een opgevangen Node-RED-nodefout

Een catch-node wordt alleen geactiveerd door fouten van nodes binnen dezelfde flow. Als u meerdere flows (of tabbladen) gebruikt, moet u de catch- en debug-nodes aan elke flow toevoegen.

Stackhero voor Node-RED biedt lokale opslag waar uw nodes bestanden kunnen opslaan. Deze opslag bevindt zich in de map /persistent/storage/.

waarschuwing Gebruik nooit een andere bestemming voor uw lokale opslag dan een submap van /persistent/storage/. Als u een andere map gebruikt, verliest u uw gegevens wanneer u een Node-RED-update toepast!

In dit voorbeeld gebruiken we de node-red-node-sqlite-node. Deze node vereist een map om zijn gegevens op te slaan.

U moet een bestand definiëren in de map /persistent/storage/, bijvoorbeeld /persistent/storage/myDatabase.sqlite.

Voorbeeld van SQLite-configuratie op Node-REDVoorbeeld van SQLite-configuratie op Node-RED

Als u gegevens lokaal moet opslaan, kunt u bestanden schrijven naar de map /persistent/storage/. Sommige Node-RED-gegevens kunnen al in deze map aanwezig zijn. Om conflicten te voorkomen, wordt aanbevolen om submappen te gebruiken, bijvoorbeeld /persistent/storage/myFlowData, om uw bestanden op te slaan.

Om deze map te maken met Node.js, voert u de volgende code uit in uw node:

fs.mkdirSync('/persistent/storage/myFlowData', { recursive: true });

opmerking Als u van plan bent om meer dan een paar bestanden op te slaan, raden we aan om een objectopslagserver te gebruiken. Objectopslagservers maken het gemakkelijker om bestanden te beheren, delen en openen via een API, zoals met het S3-protocol. Overweeg de MinIO-service beschikbaar op Stackhero voor dit doel, die u een S3-compatibele objectopslagserver biedt in slechts 2 minuten.

Bij het gebruik van een iFrame om inhoud op te vragen via een HTTP-node, kan de standaardheader X-Frame-Options: SAMEORIGIN voorkomen dat de pagina wordt weergegeven. Vanaf Node-RED versie 1.2.2-0 kunt u deze standaardheader overschrijven.

Om dit te doen, stelt u de header X-Frame-Options in op null op uw HTTP-responsenode. Bijvoorbeeld:

msg.headers = { "X-Frame-Options": null };

Voorbeeld van een node die de header X-Frame-Options insteltVoorbeeld van een node die de header X-Frame-Options instelt

U kunt dit flowvoorbeeld downloaden en importeren in uw Node-RED-instantie om de functie te testen.

Merk op dat u ook toegestane domeinen kunt beperken met behulp van de headers Content-Security-Policy: frame-ancestors <source> of X-Frame-Options: ALLOW-FROM <source>.

Als u een 502-fout tegenkomt bij het openen van uw beheerdersdashboard, begint u met het controleren van uw instantielogs. U kunt deze logs vinden in het Stackhero-dashboard onder het tabblad "Logs" nadat u uw Node-RED-service hebt geselecteerd.

De logs kunnen Node-RED-fouten bevatten die voorkomen dat het correct start. Verzamel zoveel mogelijk informatie om uw flows te helpen debuggen.

Na het bekijken van uw logs, gaat u naar uw serviceconfiguratie in het Stackhero-dashboard en schakelt u de optie "Veilige modus" in. In de veilige modus zal Node-RED opnieuw starten zonder uw flows automatisch te starten.

Dit stelt u in staat om toegang te krijgen tot het beheerdersdashboard, uw flowfouten te corrigeren en uw wijzigingen te implementeren. Zodra alles soepel werkt, vergeet dan niet om de veilige modus uit te schakelen in uw serviceconfiguratie, zodat uw flows automatisch starten bij het opnieuw starten van Node-RED.

Als u probeert een node te installeren met de Paletbeheerder maar merkt dat de versie ouder is dan die op NPM, betekent dit waarschijnlijk dat de maker van de node de versie niet heeft bijgewerkt op de Node-RED-website.

Voorheen werden nodeversies automatisch bijgewerkt om de versie die op NPM was gepubliceerd weer te geven. Dit is niet langer het geval.

Het goede nieuws is dat u de Node-RED-website kunt vragen om de versie te vernieuwen. Ga gewoon naar https://flows.nodered.org/add/node, voer de NPM-modulenaam in (bijvoorbeeld node-red-contrib-xxx), en klik op de knop "Add". Zodra dit is voltooid, keert u terug naar uw Node-RED-dashboard en opent u de Paletbeheerder. De bijgewerkte versie zou nu zichtbaar moeten zijn en klaar voor installatie.

Als u deze fout ziet bij het verzenden van een e-mail, komt dit waarschijnlijk omdat u de optie "Use secure connection" hebt geselecteerd in uw e-mailnodeconfiguratie.

Aangezien de Stackhero e-mailserver en de Node-RED-server op dezelfde instantie draaien, communiceren ze lokaal, dus u hoeft geen TLS (SSL) encryptie te gebruiken. Het inschakelen van de beveiligde verbindingoptie zorgt ervoor dat Node-RED TLS gebruikt om met de e-mailserver te communiceren, wat leidt tot de SSL-fout over een "wrong version number".

Houd er rekening mee dat als de ontvangerserver encryptie ondersteunt, de e-mail automatisch wordt versleuteld met TLS. Dit is vooraf voor u geconfigureerd.