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

时间:2015-02-14 15:09:03

标签: javascript node.js post get raspberry-pi

我在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请求的情况下运行方法?我的主要目标是只需单击一个超链接然后运行该方法..

3 个答案:

答案 0 :(得分:14)

基本上,您要求客户端脚本直接调用Node服务器脚本上的函数。除了Ajax POST AFAIK之外,唯一的其他选择是Socket.io

similar stackoverflow question可以帮助您。


编辑:我做了一个跨越多个文件的简单示例:

<强> /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。尝试按下按钮并检查您的终端。希望这会有所帮助。

答案 1 :(得分:0)

要解决您的问题,您可以使用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>

答案 2 :(得分:0)

旧问题-我知道。但是随着时间的流逝,出现了新的方式。

我可以建议尝试使用api-mount。它基本上允许将API作为简单的函数来调用,而不必考虑AJAX请求,获取,表达等。基本上在服务器中,您可以这样做:

const ApiMount = apiMountFactory()
ApiMount.exposeApi(api)

“ api”基本上是您愿意从Web应用程序调用的方法/函数的对象。

然后在Web应用程序上执行此操作:

const api = mountApi({baseUrl: 'http://your-server.com:3000'})

完成后,您可以像这样简单地调用您的API:

const result = await api.yourApiMethod()

尝试一下。希望对您有所帮助。