2017-02-16 6 views
0

Ich habe eine ziemlich einfache node.js-Anwendung, die einige LEDs über eine REST-Schnittstelle steuern soll. Es gibt Seiten, die bestimmte Infos anzeigen sollen - diese werden aus Pug-Vorlagen erstellt. Und einige andere REST-Endpunkte sollen eine LED ein- oder ausschalten.node.js express router.post gibt 404

Mein Problem ist, dass ich eine HTML-Seite zurückkehren kann mit bekommen, aber ich kann nicht eine Funktion über einen Post auszuführen.

Dies ist mein Code:

var express = require('express'); 
var router = express.Router(); 
var led = require('../public/javascripts/driveredled'); 

/* GET Red LED page. */ 
router.get('/', function(req, res, next) { 
    res.render('oneled', { title: 'Red LED' }); 
}); 

// base path is already set as being /leds/{color} 
router.post('/on', function(req, res) { 
    led.turnledon(); 
}); 

// base path is already set as being /leds/{color} 
router.post('/off', function(req, res) { 
    led.turnledoff(); 
}); 

// base path is already set as being /leds/{color} 
router.post('/blink', function(req, res) { 
    led.blinkled(); 
}); 

module.exports = router; 

und hier ist die Log-Ausgabe:

sudo npm start 
> [email protected] start /data/shared/Developing/ledconodel 
> node ./bin/www 

Listening on port port 3000 
GET /leds/blue/ 200 2291.133 ms - - 
GET /leds/blue/ 304 229.306 ms - - 
GET /stylesheets/style.css 304 11.105 ms - - 
GET /leds/blue/on 404 328.030 ms - 1155 

Wie man sehen kann, wird die HTML-Seite (dynamisch über pug erstellt) zurück richtig, aber die Post-Befehl an den Endpunkt auf, ist nicht.

Ich bin sehr neu zu node.js, Express und zugehörige Konzepte, also bin ich hier eher stecken.

Kann jemand helfen?

Mit freundlichen Grüßen

Chris

+0

Wie aus Ihrer Ausgabe zu sehen bekommen, Sie scheinen eine GET-Anfrage an '/ on' statt an eine POST-Anfrage machen. –

+0

Das liegt daran, dass Sie versuchen, mit GET auf Ihren Endpunkt zuzugreifen und nicht mit POST. – JavaEvgen

+0

Das liegt daran, dass Sie nichts zurückgeben, wenn eine Postanforderung gestellt wird. etwas wie 'router.post ('/ on', Funktion (req, res)) { led.turnledon(); res.json ({Status: 'Erfolg'}); }); ' –

Antwort

1
GET /leds/blue/on 404 328.030 ms - 1155

Aus der Log-Ausgabe, es scheint, dass Sie GET sich berufen, nicht POST. Und da Sie GET on/on context nicht angezeigt haben, erhalten Sie 404.

Können Sie bitte posten, wie Sie Ihren Dienst aufrufen.

+0

Hallo und danke an Ihre Antwort. Ich änderte den Code von Post zu Get, aber jetzt bekomme ich einen 500 Fehler wie folgt: GET/LEDs/rot/auf 500 104.539 ms - 1250 GET /stylesheets/style.css 304 1.881 ms - - GET/LEDs/rot/on 500 88.065 ms - 1250 GET /stylesheets/style.css 304 18.859 ms - - – siliconchris

1

Wenn Sie versuchen, auf eine bestimmte Route z. /on Ihr Browser standardmäßig verwendet GET Methode zur Strecke .. so dass Sie einen Fehler 404

verwenden eine andere Software wie Postman zu simulieren eine POST Methode as shown in this pic

+0

Vielen Dank. Da ich nur versuche, die LED ein- und auszuschalten, habe ich mich dazu entschieden, den Befehl von post zu ändern. Aber jetzt bin ich mit einem 500 Fehler begrüßt :-( – siliconchris

+0

500 bedeutet ein "Interner Server Fehler" es kann ein Problem mit Ihrem Code sein, um zu überprüfen, ob Ihre Route funktioniert .. fügen Sie eine 'console.log (" Testing ") ; 'in Ihrem Callback .. und testen Sie es. – Chaitanya

+0

perfekt jetzt auf meiner Website :-) Alles funktioniert wie erwartet. Ich hatte ein Problem mit der Funktion (um die LED einzuschalten), die nicht exportiert wurde und die 500 verursachte – siliconchris