2017-02-14 2 views
0

Итак, у меня есть некоторые требования, я хотел бы иметь возможность использовать Socket.IO где угодно на моем сервере, в частности, в маршрутах для отправки событий, когда выполнялись какие-либо операции CRUD.Экспортировать модуль Socket.io, который будет доступен по всему миру.

Ниже приведен файл с именем sockets.js, который я использую для инициализации своих сокетов.

(function IIFE() { 
    2 'use strict'; 
    3 
    4 var socketIO = require('socket.io'); 
    5 
    6 exports.initialize = function (server) { 
    7  var io = socketIO.listen(server) 
    8 
    9  io.sockets.on('connection', (socket) => { 
10  console.log(socket) 
11  console.log("Connected"); 
12 
13  io.sockets.on('disconnect', (socket) => { 
14   console.log('Disconnect') 
15  }); 
16  }); 
17 } 
18 
19 })(); 

Ниже приведено мое приложение app.js, которое по сути является моим сервером.

2 (function IIFE() { 
    3 'use strict'; 
    4 
    5 const chalk = require('chalk'); 
    6 
    7 if(!process.env.NODE_ENV) { 
    8  console.log(chalk.red('No environment specified...') + chalk.blue('defaulting to \'development\'')); 
    9  process.env.NODE_ENV = 'development'; 
    10 } 
    11 
    12 const express = require('express'); 
    13 const mongoose = require('mongoose'); 
    14 
    15 const config = require('./config/environment'); 
    16 
    17 mongoose.connect(config.mongo.uri, config.mongo.options); 
    18 
    19 mongoose.connection.on('error', function(err) { 
    20  console.error('Mongo Error: ' + err); 
    21 }); 
    22 
    23 const app = express(); 
    24 const server = require('http').createServer(app); 
    25 
+ 26 var io = require('./sockets.js'); 
+ 27 io.initialize(server); 
+ 28 
    29 require('./config/express')(app); 
    30 require('./routes')(app); 
    31 
    32 server.listen(config.port, config.ip, function() { 
    33  console.log('order-api listening on %d in %s mode', config.port, app.get('env')); 
    34 }); 
    35 
    36 exports = module.exports = app; 
    37 })(); 

Следующий файл находится в другой папке с именем api. Все приложение - это работающее приложение, в которое я пытаюсь интегрировать сокеты. Однако я не могу понять, как интегрировать сокеты из моего sockets.js и использовать их в следующих обработчиках маршрутов.

(function IIFE() { 
    2 'use strict'; 
    3 
    4 const router = require('express').Router(); 
    5 
    6 router.use('/carts', require('./cart')); 
    7 router.use('/orders', require('./order')); 
    8 router.use('/reports', require('./report')); 
    9 router.use('/validators', require('./validator')); 
10 
11 module.exports = router; 
12 })(); 
+0

Существует нулевой причина, чтобы обернуть ваши модули внутри IIFE. Они уже завернуты внутри области функций для вас автоматически с помощью node.js. Не нужно создавать еще один. – jfriend00

ответ

1

Вы можете объявить переменную io внутри global объекта, так чтобы он был виден со всех сторон.

global.io = socketIO.listen(server)