web-dev-qa-db-ja.com

Node js in browserからのメソッドの呼び出し(Expressを使用)

これら3つのルートをapp.jsで定義しました

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

私のルートファイルには次のものが含まれています:

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;

/ LEDonページに移動すると、メソッドが実行され、すべてが機能します。 getリクエストを使用せずにメソッドを実行することは可能ですか?私の主な目標は、メソッドを実行するハイパーリンクをクリックすることです。

11
user2255273

基本的に、クライアント側のスクリプトにNodeサーバースクリプトの関数を直接呼び出すように要求しています。Ajax以外の唯一の選択肢はPOST AFAIKですSocket.io

この 同様のstackoverflow質問 が役立つはずです。


編集:私は複数のファイルにまたがる簡単な例を作りました:

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

それを実行するには:node app.jsターミナルで、view.htmlお使いのブラウザで。ボタンを押して、端末を確認してください。お役に立てれば。

15
Keith Yong

問題を解決するには、ajaxリクエストを使用できます。次に例を示します。

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