2017-12-22 4 views
0

Der Versuch, eine Nachricht auf einer POST-Anforderung zu emittieren, einen Fehler immer sagen Eigenschaft nicht lesen emit undefinierterTrigger-Buchse auf einem Gesuch

app.post('/webhook/orders/updated', function(req, res, next) { 
    io.socket.emit('order', "Order Id " + req.body.data.id + " : Updated"); 
}); 

In den index.js, ich habe den folgenden Code:

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

auf der UI, ich habe den folgenden Code:

<script src="https://code.jquery.com/jquery-1.11.1.js"></script> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    $(function() { 
     var socket = io(); 
     socket.on('order', function(msg) { 
     $('#status').append($('<li class="alert alert-info">').text(msg)); 
     }); 
    }); 
</script> 

Antwort

1

Sie haben eine soc wählen zu emittieren.

, das zu tun, ich glaube, Sie auf jede Verbindung benötigen, wie dies die Socket-ID auf der Client-Seite zu übergeben:

Server Side

var io = require('socket.io')(http); 
io.on('connection', function (socket) { 
    socket.emit('connection:sid', socket.id); 
}); 

Client Side

<script src="https://code.jquery.com/jquery-1.11.1.js"></script> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    $(function() { 
     var socket = io(); 
     socket.on('connection:sid', function(socketId) { 
     // Set socketId to your cookies, or global variable 
     }); 
    }); 
</script> 

Und dann müssen Sie Ihre socketId an jede GET- oder POST-Anfrage senden, die Sie tun, hat Header oder Parameter. Schließlich können Sie Ihre richtige Buchse auf Ihrer Route zugreifen:

ROUTE

app.post('/webhook/orders/updated', function(req, res, next) { 
    if (req.body.socketId) { 
     var socket = io.sockets.connected[req.body.socketId]; // Find socket by id 
     if (socket) { 
      socket.emit('order', "Order Id " + req.body.data.id + " : Updated"); 
     } 
     else { 
      // No socket found with socketId 
     } 
    } 
    else { 
     // No socketId received 
    } 
}); 

Hoffe, es hilft.

0

Alternative Lösung. Ich ersetzte io.socket zu io.sockets

app.post('/webhook/orders/updated', function(req, res, next) { 
    io.sockets.emit('order', "Order Id " + req.body.data.id + " : Updated"); 
}); 
+1

Mit dieser Lösung emittieren Sie an alle angeschlossenen Steckdosen, und nicht nur ein :) – Sparw

+0

Vereinbarte .. !! :). –

Verwandte Themen