2015-02-14 12 views
8

ho definito questi tre percorsi in app.jsmetodo Nodo js dal browser Calling (Usando espresso)

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

Nel mio file percorso ho il seguente:

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; 

Così, quando vado alla pagina/LEDon il metodo viene eseguito e tutto funziona. È possibile però eseguire un metodo senza utilizzare una richiesta get? Il mio obiettivo principale è quello di fare semplicemente clic su un collegamento ipertestuale che esegue il metodo.

risposta

12

In sostanza, si chiede allo script lato client di chiamare direttamente una funzione nello script del server del nodo. L'unica altra scelta diversa da Ajax POST AFAIK è Socket.io

Questo similar stackoverflow question dovrebbe aiutarti.


edit: ho fatto un semplice esempio si estende su più file:

/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/view.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> 

per eseguirlo:node app.js nel terminale, e aperto view.html sul tuo browser. Prova a premere il pulsante e controlla il tuo terminale. Spero che questo ti aiuti.

+0

Sareste disposti a mostrarmi come utilizzare Socket.io quando si fa clic su un collegamento ipertestuale? Ho visto Socket.io prima ma non riesco a capirlo ... – user2255273

+0

Scusa se non ho familiarità con Socket.io. $ .ajax sarebbe probabilmente più facile. L'altra risposta ha una grande risposta Ajax –

+0

Pubblicato un esempio –

0

Per risolvere il problema è possibile utilizzare ajax richiesta, ad esempio:

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