【问题标题】:Calling method in Node js from browser (Using Express)从浏览器调用 Node js 中的方法(使用 Express)
【发布时间】:2023-03-14 13:44:01
【问题描述】:

我在 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 页面时,该方法运行并且一切正常。是否可以在不使用获取请求的情况下运行方法?我的主要目标是单击一个超链接,然后运行该方法..

【问题讨论】:

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


    【解决方案1】:

    本质上,您是在要求客户端脚本直接调用 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。尝试按下按钮并检查您的终端。希望这会有所帮助。

    【讨论】:

    • 你愿意告诉我点击超链接时如何使用 Socket.io 吗?我以前一直在看 Socket.io,但就是想不通..
    • 对不起,我对 Socket.io 不熟悉。 $.ajax 可能会更容易。另一个答案有一个很棒的 Ajax 答案
    • 谢谢!我最终使用了 socket.io,效果很好。所以感谢您为我指明正确的方向。
    • 这对我有用!我正在制作一个远程呈现机器人,并且已经让遥控器在 UDP 端口上监听驱动命令(最终通过串行将其发送到 iRobot Create)。因此,我可以将 W A S D 键放在我的网页上,并调用服务器端 node.js 函数向该命令服务器发送 UDP 消息!谢谢!
    • 无法让它在 Windows Server 上运行。 View.html 显示“无法获取 /view.htm”
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      老问题 - 我知道。但随着时间的推移,新的方式出现了。

      我可以建议尝试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()
      

      试试看。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-20
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        • 2016-09-13
        • 2017-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多