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ę..
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.
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>
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