-1
votes

Comment utiliser des variables pour contrôler obtenir des demandes avec JavaScript?

J'ai réussi à contrôler avec succès un relais à l'aide de My Raspberry Pi et de mon noeud JS avec le code suivant; XXX

Cependant, je me suis battu pour que le relais ne se soit activer Si c'est éteint, et ne s'éteint que si c'est sur.

J'ai essayé le code suivant en vain; xxx

Quand j'essaie de tourner le relais En accédant à MyIP: 3000 / ON, cela fonctionne comme le premier code que j'ai utilisé, cependant, lorsque j'essaie de tourner le relais en accédant à MyIP: 3000 / OFF, j'ai donné l'erreur

ne peut pas obtenir / désactiver

Je ne suis pas sûr que cela soit peut-être quelque chose à voir avec la portée locale ne mettant pas à jour la variable globale.


1 commentaires

Votre conditionnel est au mauvais endroit - vous voulez toujours que le point de terminaison Existe Même si le relais est initialement éteint.


3 Réponses :


1
votes
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;
  }
});

0 commentaires

0
votes

Ce que vous faites est bizarre.

Vous essayez d'exposer des itinéraires différents pendant que une variable change.

Vous ne pouvez pas faire cela, à la place, vous devez exposer une route par exemple le fichier, et dans le paramètre de requête de la demande, passez-le activé / désactivé (je pense aussi que vous devriez utiliser POST au lieu de vous rendre ici et de le transmettre dans le corps) .

Si vous avez besoin d'une explication plus loin, écrivez-moi!


0 commentaires

0
votes

Enregistrement des points d'extrémité et la manipulation des demandes entrantes sont deux activités distinctes.

pense comme l'enregistrement des points d'extrémité (en appelant app.get (chemin, rappel) code>) se passe avant que l'application commence à écouter des demandes. p>

Ensuite, lorsque l'application est en cours d'exécution, Express essaie de correspondre aux demandes entrantes avec les gestionnaires de points d'extrémité enregistrés pour un traitement ultérieur. P>

Si Express ne trouvera pas de points d'extrémité correspondants. Comportement par défaut et affiche une page avec des informations d'erreur, par exemple: Impossible d'obtenir /offock.

Votre code actuel, vous enregistrez des points de terminaison conditionnellement. Lorsque vous démarrez votre application, seul le noeud final / on code> est enregistré. Pour résoudre ce problème, déplacer si code> bloque sur les gestionnaires de point final ou modifiez le code comme @LFARUKI conseillé. Remeber pour ajouter else code> blocks ou ajouter suivant () code> appelle pour empêcher votre application de suspendre. P>

const express = require("express");
const Gpio = require("onoff").Gpio;
const app = express();
const port = 3000;
const REL = new Gpio(21, "out");
var x = 0;


app.get("/on", (req, res) => {
    if (x === 0) {
        REL.writeSync(1);
        res.send("Relay is on");
        x = 1;
    }
    else {
        res.send("Relay is already running");
    }
});

app.get("/off", (req, res) => {
    if (x === 1) {
        REL.writeSync(0);
        res.send("Relay is off");
        x = 0;
    }
    else {
        res.send("Relay is already turned off");
    }
});


0 commentaires