Comment puis-je exporter socket.io dans les autres modules nodejs?
J'ai socket.io
de travail dans app.js
mais quand j'essaie de l'appeler à partir d'autres modules de son ne pas créer de io.connection
pas sûr ?
app.js
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var ditconsumer = require('./app/consumers/ditconsumer');
ditconsumer.start(io);
server.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
consumer.js
module.exports = {
start: function (io) {
consumer.on('message', function (message) {
logger.log('info', message.value);
io.on('connection', function (socket) {
socket.on('message', function(message) {
socket.emit('ditConsumer',message.value);
console.log('from console',message.value);
});
});
});
}
}
OriginalL'auteur hussain | 2016-07-21
Vous devez vous connecter pour publier un commentaire.
Depuis app.js est généralement de nature de la principale de l'initialisation du module dans votre application, il faudra en général à la fois initialiser le serveur web et le support.io et se charge d'autres choses qui sont nécessaires à l'application.
En tant que tel d'une manière typique de partager
io
avec d'autres modules en les faisant passer pour les autres modules dans le module de la fonction de constructeur. Qui fonctionne comme ceci:Puis, dans consumer.js:
Ou, si vous souhaitez utiliser un
.start()
méthode pour initialiser les choses, vous pouvez faire la même chose avec que (des différences mineures):Et la méthode de démarrage dans consumer.js
C'est ce qui est connu comme le "push" module de partage de ressources. Le module de chargement vous pousse certains d'infos à vous en passant dans le constructeur.
Il y a aussi "tirer" des modèles où le module lui-même appelle une méthode dans un autre module pour récupérer l'partagé l'info (dans ce cas, le
io
objet).Souvent, les deux modèles peuvent être mis en oeuvre, mais souvent l'un ou l'autre de se sentir plus naturel, étant donné la façon dont les modules sont chargés et qui a l'information désirée et comment vous avez l'intention de modules pour être réutilisés dans d'autres circonstances.
io
objet dois-je créerio.on
connexion dans chaque module, comme vous l'avez fait pourconsumer.js
Si vous essayez d'écouter les messages entrants provenant de sockets connectées, alors vous avez besoin
io.on('connection, ...)
pour se rendre à l'connectées. Il y a certainement d'autres façons de l'architecte des choses où vous avez une centraleio.on('connection, ...)
et d'autres modules peuvent contribuer message d'auditeurs, mais c'est un grand changement dans votre code et il faudrait comprendre plus au sujet de ce que vous faites pour connaître la meilleure chose à recommander. Mais, il a également pas de gros problème pour avoir plusieursio.on('connection, ...)
auditeurs.io
est uneventEmitter
et sont conçus pour avoir beaucoup d'auditeurs.en fait j'ai mis à jour ma question code de la consommation , je suis déjà à l'exportation de la Consommation en app.js est-il possible d'ajouter un module.la fonction d'exportation inisde objet de Consommation ?
Ouais.. j'ai oublié à propos de cette approche. En fait, j'aime cette suggestion meilleure que la mienne.
Vos modifications à la consommation sont parfaitement compatibles avec ce schéma général. Si vous voulez garder votre
start
exporté méthode, puis il suffit de passerio
à lastart
méthode et l'obtenir à partir de là. Le point est que vous avez laapp
module de passer leio
objet de votreconsumer
module dans le cadre du démarrage/de l'initialisation de laconsumer
module. Mais, ce que vous montrez ressemble, vous pouvez simplement remplacer ce que vous avez avec ce que j'ai proposé et à l'utilisation d'une fonction constructeur au lieu d'unstart()
méthode, bien que ce soit peut très bien fonctionner.OriginalL'auteur jfriend00
Si vous voulez éviter les portée globale, faites votre
io
exister dans un autre fichier comme ceci:Puis dans
app.js
:et dans
consumer.js
:var socket = require('../index').io()
en consumer.js mais son lancement erreurTypeError: require(...).io is not a function
Est le nouveau fichier que vous avez ajouté appelé
index.js
?oui, il est index.js
Ne
index.js
avoir le codeexports.io = function () { return io; };
?Ce mec, ce mec f**ks. #piedPiperReference. Excellent travail avec ce petit module compagnon, m'a aidée à sortir tout un groupe avec un exercice que je fais avec ce.
OriginalL'auteur Patrick Roberts
Vous pouvez faire une instance du singleton en seulement 4 lignes.
Dans websocket.js écrire la configuration de votre serveur de code.
Puis dans votre consumer.js il faut simplement le fichier
OriginalL'auteur Dušan Minić
Je l'ai trouvé simple solution
La solution est assez simple. Utiliser une variable globale dans app.js et y accéder à partir d'autres fichiers.
global.io = require('socket.io').listen(server);
OriginalL'auteur Ko Man