node.js - 更改数据库通知的div颜色

时间:2016-08-22 09:39:57

标签: html node.js database postgresql notify

我打算制作监控系统(连接到数据库)。任何更改都由数据库中的触发器(通知)确定。

  • 当有人检测到,颜色破坏区域(由div表示) 在html文件中)应该更改为红色,并在此div文本中显示 “ALARM”或某事。
  • 如果在任何区域发生意外事件,应该是颜色 黄色,文字“ANOMALY”。
  • 确认报警后,颜色应该变为绿色(我的东西,到 确认,我使用POST,当PHP将insert插入数据库以释放触发器时。)

数据库事件表

  • id - >事件ID(作为AutoIncrement)

  • area_id - >区域ID

  • 情况 - >究竟发生了什么(1 - 正常状态,2 - 异常,3 - 警报)

触发

CREATE TRIGGER trigger_notifaj
  AFTER INSERT
  ON notifaj
  FOR EACH ROW
  EXECUTE PROCEDURE fun_notifaj();

触发功能

CREATE OR REPLACE FUNCTION fun_notifaj()
  RETURNS trigger AS
$BODY$
DECLARE
BEGIN
    PERFORM pg_notify(
        CAST('notifaj' AS text),
        (
            (NEW.id)::text || '|' ||
            (NEW.area_id)::text || '|' ||
            (NEW.situation)::text 
        ));
    return new;
END;
$BODY$

test.js

var app       =     require("express")();
var http      =     require('http').Server(app);
var io        =     require("socket.io")(http);
var pg        =     require ('pg');
var status = '';

app.get("/",function(req,res){
    res.sendFile(__dirname + '/x.html');
});


pg.connect("postgres:x@localhost:5432/notifaje", function(err, client) 
{
    if(err) 
        console.log(err);

    io.on('connection',function(socket)
    {  



console.log("A user is connected");

        socket.on('disconnect', function()
        {
            console.log('user disconnected');

        });

        client.on('notification', function(msg) 
        {

          console.log('St: ' + status)
          if (msg.name === 'notification' && msg.channel === 'notifaj')
          {
              if(status != msg.payload)
              {
              console.log(msg.payload);
              status = msg.payload;

              add_status(status,function(res)
              {
                  io.emit('refresh feed',status);
              }); 
              } 
          }
        });
    });
    client.query("LISTEN notifaj");

});    

    var add_status = function (status,callback) 
    {
      if(status) 
      {
    callback(true);
      }
      else
      {
    callback(false);
    return;
      }

    }


http.listen(3000,function(){
    console.log("Listening on 3000");
});

x.html:

<html>
  <head>
    <title>Monitoring</title>
    <script src="/socket.io/socket.io.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
    <script src = "http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
    <script>
    $(document).ready(function(){
          var socket = io();

          socket.on('refresh feed',function(msg){
            $("#show_comments").append(msg + '<br /><br />');

          });
    });
    </script>
  </head>
  <body>

    <div id="area1" style="background-color:green;">Area1</div>
    <div id="area2" style="background-color:green;">Area2</div>
    <div id="area3" style="background-color:green;">Area3</div>
    <div id="area4" style="background-color:green;">Area4</div>
    <div id="area5" style="background-color:green;">Area5</div>
    <div id="area6" style="background-color:green;">Area6</div>

      </div>
  </body>
</html>

应用基于以下教程:https://codeforgeek.com/2015/03/real-time-app-socket-io

0 个答案:

没有答案