Socket.emit не работает должным образом

я пишу небольшой код.

var app = require('../app');
var debug = require('debug')('PHCServer:server');
var http = require('http');
var pg = require('pg');

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server = http.createServer(app);
var io = require('socket.io')(server);

io.on('connection',function(socket){
  socket.on('message',function(data){
    pg.connect(str,function(err,client,done){
       var c = "'"+data.complaint+"',";
       c += "'"+data.symptoms+"'";

        client.query("INSERT INTO Appointment (complaint,symptoms) VALUES ("+c+")",
         function(error,result){
          console.log('result is');
          console.log(data.eid);
          socket.emit('message1','djlksjdslkj'); 
          client.end();
       });
     });
     console.log(data); 
  });
  socket.on('message1',function(data){
    console.log('message1 is');
    console.log(data);

  });
});

со стороны клиента я пишу небольшой код

var socket = io.connect('http://lit-spire-7546.herokuapp.com');
socket.emit("message",obj);

он вставляет данные в postgresql, но socket.emit не работает. Может ли кто-нибудь указать, почему socket.emit не работает ??


person Ritesh Mehandiratta    schedule 03.04.2015    source источник


Ответы (1)


Во-первых, вам нужно дождаться подключения клиентского сокета, прежде чем пытаться его использовать:

var socket = io.connect('http://lit-spire-7546.herokuapp.com');
socket.on("connect", function() {
    socket.emit("message",obj);
});

Кроме того, если http://lit-spire-7546.herokuapp.com не является сервером, с которого пришла ваша веб-страница, вам придется включить поддержку перекрестного происхождения на вашем сервере.

person jfriend00    schedule 03.04.2015
comment
нет проблем с излучением. потому что сообщение отправлено, поэтому оно отправилось на сервер и создало встречу. проблема возникает, когда я вызываю socket.emit на стороне сервера. это не работает. понимаю мою точку зрения ?? - person Ritesh Mehandiratta; 05.04.2015
comment
@RiteshMehandiratta - ваш клиентский код не отображает прослушиватель для сообщения message1. По какой-то причине вы помещаете этот слушатель на сервер. Но вы отправляете сообщение с сервера клиенту, поэтому, если вы хотите увидеть это сообщение, вы должны поместить прослушиватель в клиентский код. - person jfriend00; 05.04.2015