Рендеринг переменной в шаблон ejs? - PullRequest
0 голосов
/ 10 марта 2019

Моя сторона ejs (веб-страница) обновляет неправильные переменные каждый раз, когда я обновляю страницу, но каждая переменная имеет свое имя.Я не могу понять, что не так.

Мой index.js получает сообщения от esp8266, используя MQTT, и затем я передаю это ejs.

index.js

var topicTemp = "FromESPtoWeb/temp";
var topicMessagemoisture = "FromESPtoWeb/moisture";

var content = { doorMsg: "Door Closed" ,
                windowMsg: "Window Closed",
                tempMsg : "",
                moistureMsg : "" ,
                motionMsg: "Motion" };

 client.on('connect', function () {

    //Subscribe to topic "FromESPtoWeb/temp"
    client.subscribe(topicTemp, function (err) {
        if (err) {
            alert("something went wrong on subscribe to message");
        }

        client.on('message', function (topicTemp, temp) {
            console.log(temp.toString());
            content.tempMsg = temp.toString();
        });

    }) 
  //Subscribe to topic "FromESPtoWeb/moisture"   
   client.subscribe(topicMessagemoisture, function (err) {
        if (err) {
            alert("something went wrong on subscribe to message");
        }

        client.on('message', function (topicMoisture, moisture) {
            console.log("new message on " + topicMoisture + " - " + 
            moisture.toString());
            content.moistureMsg = moisture.toString();
        });
    })

})

/* GET home page. */
router.get('/', function(req, res) {
    res.render('index', {  content : content } );
});

index.ejs

<h4> <%= content.moistureMsg %> </h4>
<h4> <%= content.motionMsg %> </h4>
<h4> <%= content.windowMsg %> </h4>
<h4> <%= content.doorMsg %> </h4>

content.moistureMsg , иногда показывающий, что предполагается для контента.windowMsg или content.doorMsg показывает значение, которое должно быть content.motionMsg .Полный беспорядок ...

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Мое понимание было очень неправильным в отношении client.on и подписки. Я перестроил весь код, и теперь он работает.

var topicTemp = "FromESPtoWeb/temp";
var topicDoor = "FromESPtoWeb/door";
var topicWindow = "FromESPtoWeb/window";
var topicMoisture = "FromESPtoWeb/moisture";
var topicMotion = "FromESPtoWeb/motion";

var content = { doorMsg: "Door Closed" , windowMsg: "Window Closed", tempMsg:"", moistureMsg:"", motionMsg: ""};



client.on('connect', function () {

    client.on('message', function (topic, message) {
        if(topic === topicTemp) {
            temp(message);
        }
        if(topic === topicDoor) {
            door(message);
        }
        if(topic === topicWindow) {
            window(message);
        }
        if(topic === topicMoisture) {
            moisture(message);
        }
        if(topic === topicMotion) {
            motion(message);
        }

    });

    client.subscribe(topicTemp, function (err) {
        if (err) {
            alert("something went wrong on subscribe to message");
        }
    });
    client.subscribe(topicDoor, function (err) {
        if (err) {
            alert("something went wrong on subscribe to message");
        }
    });
    client.subscribe(topicWindow, function (err) {
        if (err) {
            alert("something went wrong on subscribe to message");
        }
    });
    client.subscribe(topicMoisture, function (err) {
        if (err) {
            alert("something went wrong on subscribe to message");
        }
    });
    client.subscribe(topicMotion, function (err) {
        if (err) {
            alert("something went wrong on subscribe to message");
        }
    });


});

var temp = (message) => {
    console.log(message.toString());
    content.tempMsg = message.toString();
}
var door = (message) => {
    if (message == "Door Open") {
        console.log("Door open");
        content.doorMsg = message;
    }else if (message == "Door Closed") {
        console.log("Door closed");
        content.doorMsg = message;
    }
}
var window = (message) => {
    if (message == "Window Open") {
        console.log("window open");
        content.windowMsg = message;
    }else if (message == "Window Closed") {
        console.log("window closed");
        content.windowMsg = message;
    }
}
var moisture = (message) => {
    console.log(message.toString());
    content.moistureMsg = message.toString();
}
var motion = (message) => {
    console.log(message.toString());
    content.motionMsg = message.toString();
}
/* GET home page. */
router.get('/', function(req, res) {
    res.render('index', {  content : content } );
});
0 голосов
/ 10 марта 2019

Используйте объект запроса!.

router.get('/', function(req, res) { 
    res.render('index', { content : req.content } ); 
});
...