Итак, у меня есть некоторые требования, я хотел бы иметь возможность использовать 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 })();
Существует нулевой причина, чтобы обернуть ваши модули внутри IIFE. Они уже завернуты внутри области функций для вас автоматически с помощью node.js. Не нужно создавать еще один. – jfriend00