2017-08-07 8 views
0

Ich nehme meine ersten Schritte in node.js/node-RED und müssen HTTP-Anfragen (GET, POST mit und ohne XML-Payload) von einer Node-Komponente, so dass ich dachte, xmlhttprequest ist meine Beste Option. Ich habe es npm-installiert. Tatsächlich installiert es in ~/.Node-rot/node_modules und/usr/local/lib/node_modules aber jedes Mal, wenn ich starte Knoten-RED es nicht meine Knotenkomponente mit dem folgenden Fehler aktiviert:Probleme bei der Installation/Verwendung von xmlhttprequest

Welcome to Node-RED 
=================== 

7 Aug 09:05:20 - [info] Node-RED version: v0.17.5 
7 Aug 09:05:20 - [info] Node.js version: v6.11.2 
7 Aug 09:05:20 - [info] Darwin 16.7.0 x64 LE 
7 Aug 09:05:20 - [info] Loading palette nodes 
7 Aug 09:05:21 - [warn] ------------------------------------------------------ 
7 Aug 09:05:21 - [warn] [rpi-gpio] Info : Ignoring Raspberry Pi specific node 
7 Aug 09:05:21 - [warn] [synaptiq-solar] Error: Cannot find module 'xmlhttprequest' 
7 Aug 09:05:21 - [warn] ------------------------------------------------------ 
7 Aug 09:05:21 - [info] Settings file : /Users/rudi/.node-red/settings.js 
7 Aug 09:05:21 - [info] User directory : /Users/rudi/.node-red 
7 Aug 09:05:21 - [info] Flows file  : /Users/rudi/.node-red/flows_Rudi.local.json 
7 Aug 09:05:21 - [info] Server now running at http://127.0.0.1:1880/ 
7 Aug 09:05:21 - [info] Waiting for missing types to be registered: 
7 Aug 09:05:21 - [info] - synaptiq-solar 

Der Name meiner Komponente mit erfordert die xmlhttprequest Komponente wie diese synaptiq-Solar und seinen Code beginnt, ist:

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; 

auch hat mein package.json einen Abschnitt Abhängigkeit xmlhttprequest bezieht, wie Sie unten sehen können:

{ 
    "name": "synaptiq-solar", 
    "version": "0.0.1", 
    "description": "Just playing around, learning how to create a custom node", 
    "dependencies": { 
    "xmlhttprequest": "1.8.0" 
    }, 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "node-red": { 
    "nodes": { 
     "synaptiq-solar": "synaptiq-solar.js" 
    } 
    }, 
    "author": "Smappee n.v.", 
    "license": "ISC" 
} 

Also, was mache ich falsch? Sollte ich die xmlhttprequest-Komponente an einem anderen Ort installieren? Gibt es ein anderes lib-Verzeichnis, in dem node-RED sucht, um abhängige Komponenten zu finden?

+0

ich ein bisschen auf der ganzen Knoten RED Situation verloren sein kann ... aber 'XMLHttpRequest' ist Teil der Lebensstandard von JavaScript. Warum sollten Sie es installieren ..? – Crowes

Antwort

2

Wenn ein benutzerdefinierter Knoten eine externe Abhängigkeit aufweist, sollte er in der Datei package.json deklariert werden, damit er neben Ihrem benutzerdefinierten Modul installiert wird.

Wenn Sie dies als ein „lokaler“ Knoten erstellt haben (mit nur eine .js und .html Datei im Verzeichnis nodes und ohne package.json), sollten Sie zum Erstellen es als Modul rücken.

Die Dokumentation enthält einen Leitfaden für richtig Verpacken Sie Ihre Knoten: https://nodered.org/docs/creating-nodes/packaging

+0

Ich habe diesen Abschnitt gelesen und deshalb habe ich in meinem package.json einen Abhängigkeitsbereich hinzugefügt. Ich merke, dass ich das zu meiner ursprünglichen Frage hinzugefügt haben sollte, also habe ich das editiert und auch npm update ausgeführt. Letzteres scheint xmlhttprequest innerhalb meines Knotens zu bündeln und das ist nicht das, was ich will, sobald ich die Komponente freigebe, oder? –

+0

Ich habe alle Anweisungen wieder gemacht (zB sudo npm link im lokalen Verzeichnis und npm link synaptiq-solar in meinem ~/.node-red-Verzeichnis und jetzt scheint es zu funktionieren, also danke, dass ich darauf zurückgehe. –

+0

froh dich funktionierte das. Fügen Sie es zu Ihrer package.json wird die Abhängigkeit in Ihrem Knoten nicht bündeln - aber es teilt npm, dass es dieses Modul als eine Abhängigkeit installieren muss, wenn es Ihren Knoten installiert.Wenn meine Antwort half, Ihre Frage zu lösen, bitte denken Sie daran Um es als Accepted zu markieren. – knolleary