Wywołanie metody w węźle js z przeglądarki (za pomocą Express)

Zdefiniowałem te trzy trasy w aplikacji.js

app.use('/', require('./routes/index'));
app.use('/LEDon', require('./routes/LEDon'));
app.use('/LEDoff', require('./routes/LEDoff'));

W moim pliku trasy mam następujące:

var express = require('express');
var router = express.Router();
var Gpio = require('onoff').Gpio,
    led = new Gpio(17, 'out');

router.get('/', function(req, res, next) {
  led.writeSync(1);
});

module.exports = router;

Więc kiedy wchodzę na stronę / LEDon metoda działa i wszystko działa. Czy jednak możliwe jest uruchomienie metody bez użycia żądania get? Moim głównym celem jest po prostu kliknąć hiperłącze, które następnie uruchamia metodę..

Author: user2255273, 2015-02-14

2 answers

Zasadniczo prosisz skrypt po stronie klienta o bezpośrednie wywołanie funkcji na skrypcie serwera węzła. Jedynym innym wyborem niż Ajax POST AFAIK jest Socket.io

To podobne pytanie stoskoverflow powinno ci pomóc.


Edit: zrobiłem prosty przykład obejmujący wiele pliki:

/test/app.js:

var express = require('express');
var app = express();

app.post('/LEDon', function(req, res) {
    console.log('LEDon button pressed!');
    // Run your LED toggling code here
});

app.listen(1337);

/test/clientside.js

$('#ledon-button').click(function() {
    $.ajax({
        type: 'POST',
        url: 'http://localhost:1337/LEDon'
    });
});

/test/widok.html

<!DOCTYPE html>
<head>
</head>

<body>
    <button id='ledon-button'>LED on</button>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src='clientside.js'></script>
</body>

Aby go uruchomić: node app.js w terminalu i otwórz view.html w swojej przeglądarce. Spróbuj nacisnąć przycisk i sprawdź terminal. Mam nadzieję, że to pomoże.

 14
Author: Keith Yong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:08

Do rozwiązania problemu możesz użyć ajax request, na przykład:

<body>
    <a onClick=LEDon>LED On</a>
    <a onClick=LEDoff>LED Off</a>

    <script>
    function LEDon(){
       $.ajax({
          url: "http://yourDomain.com/LEDon"
       });
    }

    function LEDoff(){
       $.ajax({
          url: "http://yourDomain.com/LEDoff"
       });
    } 

    </script>
<body>
 0
Author: siavolt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-14 15:29:11