从浏览器调用Node js中的方法(使用Express)

use*_*273 11 javascript post get node.js raspberry-pi

我在app.js中定义了这三个路由

app.use('/', require('./routes/index'));
app.use('/LEDon', require('./routes/LEDon'));
app.use('/LEDoff', require('./routes/LEDoff'));
Run Code Online (Sandbox Code Playgroud)

在我的路线文件中,我有以下内容:

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;
Run Code Online (Sandbox Code Playgroud)

因此,当我进入/ LEDon页面时,该方法运行并且一切正常.是否可以在不使用get请求的情况下运行方法?我的主要目标是只需单击一个超链接,然后运行该方法..

Kei*_*ong 15

基本上,您要求客户端脚本直接调用Node服务器脚本上的函数.除了Ajax POSTAFAIK 之外唯一的其他选择是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);
Run Code Online (Sandbox Code Playgroud)

/test/clientside.js

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

/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>
Run Code Online (Sandbox Code Playgroud)

要运行它: node app.js在终端中,然后view.html在浏览器上打开.尝试按下按钮并检查您的终端.希望这可以帮助.

  • 这对我有用!我正在制作一个远程呈现机器人并且已经有远程控制器在UDP端口上侦听驱动器命令(最终通过串口将其发送到iRobot Create).因此,我可以将WASD密钥放在我的网页上,并调用服务器端node.js函数向该命令服务器发送UDP消息!谢谢! (2认同)