Кнопка для отправки http на сервер NodeJS / Express для выполнения функции - PullRequest
0 голосов
/ 29 января 2019

У меня есть кнопка в моем внешнем интерфейсе, и я использую nodejs и экспресс в моем серверном бэкенде.У меня есть функция (по сути, управляющая Philips Hue API) на бэкэнде, и я бы хотел, чтобы она выполнялась при нажатии кнопки через запрос http.

Я пробовал разные методы.внутренний скрипт для элементов управления Philips Hue работает независимо, когда я извлекаю его и запускаю в git bash.Я думаю, что есть некоторые концептуальные ошибки или ошибки кодирования.

Кнопка HTML

<button id="pulse" type="button" class="btn btn-danger">Pulsing Lights</button>

Клиентская сторона JS

const pulseButton = document.getElementById("pulse");
pulseButton.addEventListener('click', function() {
  fetch('/huePulseLight', {method: 'POST'})
    .then(function(response) {
      if(response.ok) {
        console.log('Click was recorded');
        return;
      }
      throw new Error('Request failed.');
    })
    .catch(function(error) {
      console.log(error);
    });
});

Бэкенд / Серверная сторона JS

const port = 3000;
const server = http.Server(app);
server.listen(process.env.PORT || 3000, function(){
    console.log('Server running on port ' + port);
});


const app = express();

pulseLight = lightState.create().on().colorLoop();

function setPulseLight() {
  nodeHueapi.setLightState(1, pulseLight, function (err, lights) {
    if (err) throw err;
    displayResult(lights);
  });

  nodeHueapi.setLightState(2, pulseLight, function (err, lights) {
    if (err) throw err;
    displayResult(lights);
  });

  nodeHueapi.setLightState(3, pulseLight, function (err, lights) {
    if (err) throw err;
    displayResult(lights);
  });
}

app.post('/huePulseLight', function(req, res){
console.log("Pulse Light Set");
setPulseLight();
});

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Изолировать проблему .Прежде чем добавлять что-либо, убедитесь, что и сервер, и консоль браузера работают правильно.Это более или менее минимальный код для взаимодействия клиента и сервера.Запустите node server.js в test, перейдите к localhost:3000, щелкните текст, просмотрите результаты консоли.

test/server.js

const express = require("express")
const app = express()

// make index.html accessible to clients
app.use(express.static('public'))

app.post('/huePulseLight', function(request, response){
  console.log("Pulse Light Set");
  response.send("Click Recorded")
});

app.listen(3000)

test/public/index.html

<html>
  <head></head>
  </body>
    <p id="pulse">foo</p>

    <script>      
      const pulseButton = document.getElementById("pulse")

      pulseButton.addEventListener('click', function() {
        fetch('/huePulseLight', {method: 'POST'})
          .then(response => response.text())
          .then(text => console.log(text))
      })
    </script>
  </body>
</html>
0 голосов
/ 29 января 2019

Вам не хватает app.listen(PORT) на вашем сервере.

Кроме того, вы не отправляете обратно ничего от сервера к клиенту, что может привести к тому, что клиент сохранит соединение с сервером и вашим сервером открытым.обещание никогда не будет выполнено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...