2017-02-16 5 views
0

У меня довольно простое приложение node.js, которое должно управлять некоторыми светодиодами через интерфейс REST. Существуют страницы, которые должны отображать определенные сведения - они создаются из шаблонов мопсов. И некоторые другие конечные точки REST должны включать или выключать светодиод.node.js express router.post дает 404

Моя проблема заключается в том, что я могу вернуть HTML-сайт с получить, но я не могу выполнить функцию через пост.

Это мой код:

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; 

и вот выход журнала:

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 

Как можно видеть, страница HTML (динамически созданные с помощью мопса) возвращается правильно, но пост-команда до конечной точки на, нет.

Я очень новичок в node.js, выражениях и связанных с ними концепциях, поэтому я скорее застрял здесь.

Может ли кто-нибудь помочь?

С наилучшими пожеланиями,

Chris

+0

Как виден из вашего выхода, вы, кажется, делать запрос GET на '/ on' вместо запроса POST. –

+0

Это потому, что вы пытаетесь получить доступ к своей конечной точке с помощью GET, а не с POST. – JavaEvgen

+0

Это потому, что вы ничего не возвращаете, когда создается почтовый запрос. что-то вроде 'router.post ('/ on', function (req, res) { led.turnledon(); res.json ({status: 'success'}); }); ' –

ответ

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

С выхода журнала, кажется, вы вызываете GET, не POST. И поскольку вы не выставили GET on/on context, вы получаете 404.

Не могли бы вы сообщить, как вы ссылаетесь на свое обслуживание.

+0

Привет и спасибо вашему ответу. Я изменил код из сообщения, чтобы получить, но теперь я получаю 500 таких ошибок: GET/leds/red/on 500 104.539 ms - 1250 GET /stylesheets/style.css 304 1.881 ms - - GET/leds/red/on 500 88.065 ms - 1250 GET /stylesheets/style.css 304 18.859 ms - - – siliconchris

1

При попытке доступа к определенному маршруту, например. /on, ваш браузер по умолчанию использует GET метод для маршрутизации .. так что вы получите ошибку 404

использовать другое программное обеспечение, как Postman для имитации POST методы as shown in this pic

+0

Большое спасибо. Поскольку я только пытаюсь включить и выключить светодиод, я решил изменить команду из сообщения, чтобы получить. Но теперь меня встретили с ошибкой 500 :-( – siliconchris

+0

500 означает «Внутренняя ошибка сервера», может возникнуть проблема с вашим кодом, чтобы проверить, работает ли ur route. Добавьте 'console.log (« Тестирование ») 'внутри вашего обратного вызова .. и проверить его. – Chaitanya

+0

отлично сейчас на моем сайте :-) Все работает так, как ожидалось. У меня возникла проблема с функцией (чтобы включить светодиод), который не был экспортирован, что вызвало 500 – siliconchris

Смежные вопросы