从浏览器调用Node js中的方法(使用Express)
我在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请求? 我的主要目标是只需点击一个超链接,然后运行该方法..
本质上,您要求您的客户端脚本直接调用您的节点服务器脚本上的function。 除Ajax POST
AFAIK之外,唯一的其他select是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>
要运行它:terminal中的node app.js
,并在浏览器中打开view.html
。 尝试按下button,并检查出你的terminal。 希望这可以帮助。
为了解决你的问题,你可以使用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>