これら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リクエストを使用せずにメソッドを実行することは可能ですか?私の主な目標は、メソッドを実行するハイパーリンクをクリックすることです。
基本的に、クライアント側のスクリプトに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
お使いのブラウザで。ボタンを押して、端末を確認してください。お役に立てれば。
問題を解決するには、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>