繁体   English   中英

通过 NodeJS 在 Raspberry 上运行 bash 脚本

[英]Run a bash script on a Raspberry via NodeJS

我在我的 Pi 上运行一个带有 NodeJS 的本地网站,我想通过连接到 Pi 的 433MHz 发送器控制一盏灯。 我已经编写了一个 bash 脚本,它可以完美地控制灯,但我找不到通过节点服务器上的 HTML 站点执行它的方法。 所以我问它是否有可能,因为它对我来说似乎并不安全,我如何在 javascript 中将它作为函数或仅在服务器端实现?

有很多方法可以做这样的事情,但一种方法是创建一个 api,这样您的网站就可以对服务器进行 api 调用以打开和关闭灯

所以这是一个简单的例子

HTML

<html>
    <head>
            <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
    </head>
    <body>
        <form>
            <input type="button" Value="on" onclick="turnOn()">
            <input type="button" value="off" onclick="turnOff()">
        </form>
    </body>
</html>
<script>
function turnOn(){
$.ajax({
    url: 'http://localhost:3000/api/light/on',
    type: "GET",
    dataType: "json",
    success: function (data) {
        console.log(data);
    },
    error: function (error) {
        console.log(`Error ${error}`);
    }
});
}

function turnOff(){
$.ajax({
    url: 'http://localhost:3000/api/light/off',
    type: "GET",
    dataType: "json",
    success: function (data) {
        console.log(data);
    },
    error: function (error) {
        console.log(`Error ${error}`);
    }
});
}

</script>

服务器

//server.js
const app = require('express')();
const server = require('http').createServer(app);
var cors = require('cors');
const shell = require('shelljs')
var port = 3000;


server.listen(port, () => console.log(`API server running on  ${port}!`))
app.use(cors())

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html')
})

app.get('/api/light/:status', (req, res) => {
    var status = req.param('status')
    if(status == 'on'){
        shell.exec('./turn-light-on')
        res.json({success:"light turned on"})
    }else{
        shell.exec('./turn-light-off')
        res.json({success:"light turned off"})
    }
})

您所要做的就是更改 shell.exec() 调用的文件以使其工作

这个应用程序需要

  • 表达
  • 科尔斯
  • shelljs

安装只需 npm install 上面列出的名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM