从浏览器调用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>