Node.js Fehler: ECONNREFUSED verbinden

74

Ich bin neu in Node und stoße in einem einfachen Tutorial auf diesen Fehler.

Ich bin unter OS X 10.8.2 und versuche dies über CodeRunner und das Terminal. Ich habe auch versucht, mein Modul in den node_modulesOrdner zu legen .

Ich kann sagen, dass dies eine Art Verbindungsproblem ist, aber ich habe keine Ahnung warum?

events.js:71
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: connect ECONNREFUSED
    at errnoException (net.js:770:11)
    at Object.afterConnect [as oncomplete] (net.js:761:19)

app.js:

var makeRequest = require('./make_request');

makeRequest("Here's looking at you, kid");
makeRequest("Hello, this is dog");

make_request.js:

var http = require('http');

var makeRequest = function(message) {

    //var message = "Here's looking at you, kid.";
    var options = {
        host: 'localhost', port: 8080, path:'/', method: 'POST'
    }

    var request = http.request(options, function(response) {
        response.on('data', function(data) {
            console.log(data);
        });
    });
    request.write(message);
    request.end();
};

module.exports = makeRequest;
Ian
quelle
Ich habe diesen Code auch aktiviert https://c9.io/und erhalte den gleichen Fehler.
ian
Offen für eingehende Nachrichten oder was? Gleiches Problem auf einem Knotenserver, der die vom Dienst definierten Ports und den Host verwendet. Wenn Sie tatsächlich wissen, was hier vor sich geht, posten Sie eine echte Lösung, keine vagen Kommentare, wie in der Frage angegeben. Ich bin neu bei Node.
ian
2
@ian, Nirgendwo in Ihrem Kabeljau erstellen Sie einen Server. Was läuft auf Port 8080, mit dem Sie eine Verbindung herstellen möchten?
Brad
2
Für zukünftige Leser habe ich versucht, eine API-Anfrage an einen PHP-Server zu stellen, und mein Anfrageport wurde nicht auf 80 gesetzt. Nach der Änderung funktionierten meine http-Anfragen einwandfrei.
Michael J. Calkins

Antworten:

49

Möglicherweise haben Sie Probleme damit, dass node.js stirbt, wenn der Server, den Sie anrufen, die Verbindung verweigert. Versuche dies:

process.on('uncaughtException', function (err) {
    console.log(err);
}); 

Dadurch bleibt Ihr Server am Laufen und Sie können den Debugger anhängen und nach einem tieferen Problem suchen.

user2957009
quelle
20
Es ist gefährlich, den Server nach einer nicht erfassten Ausnahme am Laufen zu halten. Sie wissen nicht, ob die Ausnahme Ihren Server in einem erwarteten Zustand belassen hat. Es ist viel sicherer, den Server zu beenden und ihn von einem anderen Prozess neu starten zu lassen (und die Ausnahme natürlich zu protokollieren).
Martin Epsz
3
Im Allgemeinen ist es keine gute Idee, alle Ausnahmen im Dunkeln zu fangen. Schauen Sie sich diese Antwort an .
Yan Foto
4
Es hängt davon ab, was Sie erreichen möchten. Ich habe eine Überwachungs-App geschrieben, in der es wichtig ist, Schritt zu halten und in Bewegung zu bleiben. Es scheint, dass das OP Schwierigkeiten hatte, herauszufinden, worum es ging. Alle anderen Antworten beziehen sich auf bestimmte Probleme, die die Ursache für diesen Fehler sein können. Als Debugging-Schritt ist das oben Genannte fast immer erforderlich, bevor Sie einen Drilldown zum eigentlichen Problem durchführen können. Es ist auch seltsam für mich, dass Sie in Ordnung sind, wenn Ihr Server aufgrund eines Fehlers stirbt und alle anderen Clientaufrufe fehlschlagen?
user2957009
11

Ich hatte das gleiche Problem mit Ghost und Heroku.

heroku config:set NODE_ENV=production 

Ich habe es gelöst!

Überprüfen Sie Ihre Konfiguration und Umgebung, auf der der Server ausgeführt wird.

Siddhartha Mukherjee
quelle
2
Können Sie erklären, warum dies das Problem behebt?
Brad
Ich habe heroku config verwendet: setze NPM_CONFIG_PRODUCTION = false. Ich würde gerne wissen, wie das funktioniert hat
Winnemucca
9

Sie versuchen, eine Verbindung zu localhost herzustellen: 8080 ... wird auf Ihrem localhost und an diesem Port ein Dienst ausgeführt? Wenn nicht, wird die Verbindung abgelehnt, was diesen Fehler verursacht. Ich würde vorschlagen, zuerst zu überprüfen, ob auf localhost etwas läuft: 8080.

JakubKnejzlik
quelle
6

Sie müssen einen Server auf Port 8080 ausführen, wenn Sie den obigen Code ausführen, der die Anforderung einfach über die Antwort zurückgibt. Kopieren Sie den folgenden Code in eine separate Datei (z. B. 'server.js') und starten Sie diesen Server mit dem Befehl node (node ​​server.js). Sie können Ihren obigen Code (Knoten app.js) dann separat über eine separate Befehlszeile ausführen.

var http = require('http');

http.createServer(function(request, response){

    //The following code will print out the incoming request text
    request.pipe(response);

}).listen(8080, '127.0.0.1');

console.log('Listening on port 8080...');
Andrew M.
quelle
5

Manchmal kann es vorkommen, dass Ihr Code eine Datenbankverbindung enthält, Sie den Datenbankserver jedoch noch nicht gestartet haben.

In meinem Fall habe ich einen Code, um mich mit Mongodb zu verbinden

mongoose.connect("mongodb://localhost:27017/demoDb");

Nachdem ich den Mongodb-Server mit dem Befehl Mongod gestartet habe, ist dieser Fehler verschwunden

pashaplus
quelle
3

Wenn Sie sich auf dem MEAN-Stapel (Mongo-Express-AngularJS-Node) befinden, führen Sie zuerst mongod aus, und diese Fehlermeldung wird ausgeblendet.

Bob Vargas
quelle
2 Tage Suche und dann sah ich Ihren Kommentar, rettete meinen Tag
Ahmad Ali
1

Überprüfen Sie dies mit dem Starten von MySQL im Terminal. Verwenden Sie den folgenden Befehl

mysql-ctl start

In meinem Fall hat es funktioniert

Mujaffars
quelle
0

Dieser Fehler tritt auf, wenn der Node.js-Prozess noch ausgeführt wird und sie versuchen, den Server erneut zu starten. Versuche dies:

ps aux | grep node

Dies druckt etwas in der Art von:

user    7668  4.3  1.0  42060 10708 pts/1    Sl+  20:36   0:00 node server
user    7749  0.0  0.0   4384   832 pts/8    S+   20:37   0:00 grep --color=auto node

In diesem Fall ist der Prozess derjenige mit der PID 7668. Um ihn zu beenden und den Server neu zu starten, führen Sie ihn aus kill -9 7668.

rahulmehta95
quelle
4
Das ist hier nicht das Problem. Beim Versuch, eine Anfrage zu stellen, wird ihm die Verbindung verweigert.
Brad
0

Das Unhandled 'error' eventbezieht sich darauf, keine Funktion für die Anforderung bereitzustellen, Fehler zu übergeben. Ohne dieses Ereignis endet der Knotenprozess mit dem Fehler, anstatt ordnungsgemäß zu versagen und tatsächliches Feedback zu geben. Sie können das Ereignis direkt vor der request.writeZeile festlegen , um Probleme zu erkennen:

request.on('error', function(err)
{
    console.log(err);
});

Weitere Beispiele unten:

https://nodejs.org/api/http.html#http_http_request_options_callback

SmujMaiku
quelle
0

Der gleiche Fehler tritt in localhost auf. Ich ändere nur den MySQL-Port (8080 in Localhost-MySQL-Port 5506). Für mich geht das.

Jai
quelle
1
Dies gibt keine Antwort auf die Frage.
Chris Tapay
0

Führen Sie server.js über eine andere Befehlszeile und client.js über eine andere Befehlszeile aus

Shamila
quelle
0

Hatte ein ähnliches Problem, stellte sich heraus, dass der gedruckte Abhörport anders war als er tatsächlich war. Tippfehler in der Anforderungszeichenfolge oder in der Abhörfunktion lassen den Zielserver möglicherweise nicht vorhanden erscheinen.

Ricardo Mitchell
quelle