javascript - 通过 NodeJS 在 Raspberry 上运行 bash 脚本
问题描述
我在我的 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 上面列出的名称
推荐阅读
- r - R - 计算 Parwise Cohen 的 d
- python - 使用按钮退出 Kivy 应用程序 - NameError
- python - 破折号异常 InvalidCallbackReturnValue
- android - 如何让父母只能点击?
- javascript - “Window.history.back()”和“history.back()”有什么区别?
- javascript - 选中复选框时的jquery然后父tr +其他rowspan tr背景更改
- reactjs - React 的“npm run build”命令在“虚拟环境”中运行时出错
- mysql - MySQL 错误 #1064 创建具有 DOUBLE 列的表
- firebase - 我无法在一台设备上安装重复的颤振应用程序
- ios - JTAppleCalendar - 仅针对可见单元格的单元格自动布局更新存在问题