如何使用变量控制Javascript的get请求?
我已经用我的Raspberry Pi和Node JS成功地控制了一个中继,代码如下:如何使用变量控制Javascript的get请求?,javascript,node.js,express,variables,raspberry-pi,Javascript,Node.js,Express,Variables,Raspberry Pi,我已经用我的Raspberry Pi和Node JS成功地控制了一个中继,代码如下: const express = require("express"); const Gpio = require("onoff").Gpio; const app = express(); const port = 3000; const REL = new Gpio(21, "out"); app.get("/on", (req
const express = require("express");
const Gpio = require("onoff").Gpio;
const app = express();
const port = 3000;
const REL = new Gpio(21, "out");
app.get("/on", (req, res) => {
REL.writeSync(1);
res.send("REL is on");
});
app.get("/off", (req, res) => {
REL.writeSync(0);
res.send("REL is off");
});
然而,我一直在努力让继电器只有在关闭时才能打开,只有在打开时才能关闭
我尝试了以下代码,但没有成功
const express = require("express");
const Gpio = require("onoff").Gpio;
const app = express();
const port = 3000;
const REL = new Gpio(21, "out");
var x = 0;
if (x === 0) {
app.get("/on", (req, res) => {
REL.writeSync(1);
res.send("Relay is on");
x = 1;
});
}
if (x === 1) {
app.get("/off", (req, res) => {
REL.writeSync(0);
res.send("Relay is off");
x = 0;
});
}
当我试图通过访问myip:3000/on打开继电器时,它的工作原理与我使用的第一个代码一样,然而,当我试图通过访问myip:3000/off关闭继电器时,我得到了一个错误
不能下车
我不确定这是否与局部作用域不更新全局变量有关。你所做的很奇怪
const express = require("express");
const Gpio = require("onoff").Gpio;
const app = express();
const port = 3000;
const REL = new Gpio(21, "out");
let status = 0;
app.get("/toggle", (req, res) => {
if(status){
REL.writeSync(0);
res.send("REL is off");
status = 0;
}else{
REL.writeSync(1);
res.send("REL is on");
status = 1;
}
});
当变量发生变化时,尝试公开不同的路由
您不能这样做,相反,您应该公开一个路由,例如file,并在请求的查询参数中传递him on/off(我还认为您应该使用post,而不是get here,并在body中传递它)
如果你需要进一步的解释,写信给我 注册端点和处理传入请求是两个独立的活动 想象一下在应用程序开始侦听请求之前注册端点(通过调用
app.get(path,callback)
)
接下来,当应用程序运行时,Express尝试将传入的请求与注册的端点处理程序相匹配,以进行进一步处理
如果Express找不到任何匹配的端点,它将返回其默认行为,并显示包含错误信息的页面,例如:无法获取/退出
在当前代码中,可以有条件地注册端点。启动应用程序时,仅注册上的/端点。若要修复此行为,请将if
块移动到端点处理程序或更改代码(如建议)。请记住添加else
块或添加next()
调用以防止应用程序挂起
const express=require(“express”);
const Gpio=require(“onoff”).Gpio;
常量app=express();
常数端口=3000;
const REL=新的Gpio(21,“输出”);
var x=0;
应用程序获取(“/on)”,(请求、恢复)=>{
如果(x==0){
相对写入同步(1);
res.send(“继电器开启”);
x=1;
}
否则{
res.send(“中继已在运行”);
}
});
应用程序获取(“/off)”,(请求、恢复)=>{
如果(x==1){
相对写同步(0);
res.send(“继电器关闭”);
x=0;
}
否则{
res.send(“继电器已关闭”);
}
});
您的条件位于错误的位置-您仍然希望/off
端点存在,即使中继最初处于关闭状态。