Как настроить socket.io для получения данных в реальном времени - PullRequest
0 голосов
/ 26 января 2019

Я плохо знаком со средним стеком и следовал инструкциям по получению данных в реальном времени. Я пробовал каждый шаг, но ничего из этого не работает, как я могу правильно использовать socket.io? Я предоставил свой код для получения пользователей из mongodb, пожалуйста, исправьте мой код

server.js

var express     = require ('express');
var app         = express();
var server      = require('http').Server(app);
var http        = require('http').Server(app);
var io          = require('socket.io')(http);
var morgan      = require ('morgan');
var mongoose    = require('mongoose');
var appRoutes   = require('./app/routes/api');

app.use(morgan('dev'));
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(express.static(__dirname + '/public'));
app.use('/api',appRoutes);

mongoose.connect('mongodb://localhost:27017/testing', function(err){
    if(err){
        console.log('Not connected' + err);
    } else
    {
        console.log('Connected');
    }
});

Тогда вот часть, где я получаю пользователей из таблицы, я не знаю, как получить данные в режиме реального времени:

api.js

var User = require('../models/user');
const router = express.Router();
router.get('/management', function(req, res) {
        User.find({}, function(err, users) {
                if (!users) {
                    res.json({ success: false, message: 'Users not found' }); 
                } else {
                    res.json({ success: true, users: users,});
                }
        });
    });

userCtrl.js

.controller('managementCtrl', function(User, $scope) {
 function getUsers() { 
        User.getUsers().then(function(data) {
            if (data.data.success) {
                app.users = data.data.users;    
            } else {
                app.errorMsg = data.data.message; 
            }
        });
    }
});

userServices.js

angular.module('userServices', [])

.factory('User', function($http) {
 var userFactory = {}; 
 userFactory.getUsers = function() {
        return $http.get('/api/management/');
    };

 return userFactory;
    });

};

users.html

<tbody>
    <tr ng-repeat="person in management.users">
        <td align="center">{{ person.name }}</td>
        <td align="center">{{ person.email }}</td>
    </tr>
</tbody>

1 Ответ

0 голосов
/ 26 января 2019

Необходимо установить постоянное соединение сокета с frontEnd. После установления постоянного соединения вы должны прослушать конкретное событие, а затем отправить данные пользователя в реальном времени.
Вы можете достичь этого:

server.js

 var express     = require ('express');
var app         = express();
var server      = require('http').Server(app);
var http        = require('http').Server(app);
var io          = require('socket.io')(http);
var morgan      = require ('morgan');
var mongoose    = require('mongoose');
var appRoutes   = require('./app/routes/api');
var User = require('../models/user');

app.use(morgan('dev'));
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(express.static(__dirname + '/public'));
app.use('/api',appRoutes);

mongoose.connect('mongodb://localhost:27017/testing', function(err){
    if(err){
        console.log('Not connected' + err);
    } else
    {
        console.log('Connected');
    }
});

io.on('connection', function(socket) {
  console.log('New Socket has been connected');
  socket.on('getUserDetails', function() {
    User.find({}).then(function(data){
      socket.emit('userDetails', data)
   })
  })
})

В fronEnd вы можете вызвать событие getUserDetails для получения данных с сервера и прослушать userDetails для получения ответа от сервера.

Нечто подобное может быть реализовано в переднем конце угловая

...