0

我做了一个LiveQuery,但我不明白为什么当我向 Class Buyers 插入内容时它没有响应。

这是我的代码:

function hearingQueries() {
    server.liveQuery("LIVE SELECT FROM Buyers")
    .on('live-insert', function(data) {
      io.emit('chat message', "Server says: " + data.content.message);
    })
    .on('live-delete', function(data) {
      io.emit('chat message', "Server deleted: " + data.content.message);
    })
  }

hearingQueries()当有人连接到页面时调用该函数:

io.on('connection', function(socket) {
  console.log('User connected.');
  
  server.open();
  hearingQueries();
  
  console.log('Connection succeeded.');

server.open();是一个启动连接的函数。

我的问题是:

  • 为什么这不起作用?

  • 当有人连接或服务器上线时启动服务器更好吗?

  • 如果最好在服务器启动时启动它,它不会减慢服务器速度吗?

这是我的代码,因此您可以确切地看到发生了什么:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var OrientDB = require('orientjs').ODatabase;
/*if (typeof localStorage === "undefined" || localStorage === null) {
  var LocalStorage = require("node-localstorage").LocalStorage;
  localStorage = new LocalStorage('./scratch');
}*/


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

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

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

app.get('/', function(req, res){
    
    res.sendFile(__dirname + "/login.html");
    console.log('User has reached the login page.');
});

var msgs = [];
var names = [];
var i = 0;

var server = new OrientDB({
    host:       'localhost',
    port:       8081,
    username:   'root',
    password:   'rootPassword',
    name: 'DemoUdemy',
    useToken: true
  });

  
  function openServer(){
    server.open().then(function(){
      console.log("Server Opened.");
    }); 
  }
  
  function closeServer(){
    server.close().then(function(){
      console.log("Server Closed.");
    });
  }
  
  function insert(className, name, bucket, color){
      
    server.query("INSERT INTO "+className+"(name, bucket, color) VALUES('"+name+"', '"+bucket+"', '"+color+"')");
  }
  
  /*function select(items ,className){
    
    var msgTemp = server.query("SELECT '"+items+"' FROM '"+className+"'");
    console.log(msgTemp.Content.Data);
  }*/
  
  function hearingQueries(){
    server.liveQuery("LIVE SELECT FROM Buyers")
    .on('live-insert', function(data){
      io.emit('chat message', "Server says: " + data.content.message);
    })
    .on('live-delete', function(data){
      io.emit('chat message', "Server deleted: " + data.content.message);
    })
  }

io.on('connection', function(socket){
  console.log('User connected.');
  
  openServer();
  //select("name, bucket", "Buyers");
  hearingQueries();
  
  console.log('Connection Succed.');
  
  var iTemp = i - 1;
  
  for(var msg in msgs)
    socket.emit('chat message', msgs[msg]);
  
  socket.on('chat message', function(msg){
    msgs.push(names[iTemp] + msg);
    io.emit('chat message', names[iTemp] + msg);
  });
  
  socket.on('getUser', function(user){
    i++;
    names[i-1] = user + ": ";
  });
  
  socket.on('disconnect', function(){
    i--;
    closeServer();
    console.log("User has disconnected.");
  });
  
});

http.listen(8080, function(){
  console.log('Listening to Port *8080');
});
4

0 回答 0