J'essaie d'intégrer socket.io dans mon application Keystone. Je suis instancier l'objet dans le bas de mon keystone.app comme suit:
var sock = require("socket.io");
keystone.start({
onStart: function() {
var hserver = keystone.httpServer;
var io = keystone.set("io", sock.listen(hserver)).get("io");
// Socket function
io.on("connection", function (socket) {
console.log("Socket connected.")
socket.on("hon", function (data) {
socket.emit("hon_res", {data})
});
});
}
});
Tout cela fonctionne bien et je peux émettre et recevoir des messages de mes sockets. Le problème se pose lorsque j'essaie d'émettre un message après que l'un de mes modèles a été utilisé pour insérer des données dans mongo db.
Dans mon fichier schéma / modèle. J'ai ajouté cette partie. Il est appelé correctement, mais le socket semble incapable de se connecter à la session du socket.
Hon.schema.post("save", function(data){
var io = keystone.get("io");
io.attach(keystone.httpServer)
io.sockets.emit("hon_upd");
});
Je reçois cette erreur dans la console du client, quelques secondes après l'appel de la fonction de sauvegarde:
VM7414 extensions::messaging:79 Uncaught Error: Attempting to use a disconnected port object
at PortImpl.postMessage (extensions::messaging:79:13)
at Port.publicClassPrototype.(anonymous function) [as postMessage] (extensions::utils:149:26)
at destroyPurpleBox (file:///Users/thobyy/Library/Application%20Support/Google/Chrome/Default/Extensions/mlomiejdfkolichcflejclcbmpeaniij/7.2.2_0/dist/purplebox.js:43:9)
at file:///Users/thobyy/Library/Application%20Support/Google/Chrome/Default/Extensions/mlomiejdfkolichcflejclcbmpeaniij/7.2.2_0/dist/purplebox.js:51:5
Réponses:
0 pour la réponse № 1pourquoi vous attachez io à httpserver une fois agait.
io.attach(keystone.httpServer)
essayez de supprimer la ligne ci-dessus