首页 > 解决方案 > 如何设置 socket.io 以实时获取数据

问题描述

我是 mean-stack 的新手,我遵循了一些关于如何获取实时数据的说明。我尝试了每一个步骤,但都没有工作,我怎样才能正确使用 socket.io?我在这里提供了我的代码以从 mongodb 获取用户,请更正我的代码

服务器.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,});
                }
        });
    });

用户Ctrl.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; 
            }
        });
    }
});

用户服务.js

angular.module('userServices', [])

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

 return userFactory;
    });

};

用户.html

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

标签: node.jsangularjsexpresssocket.iomean-stack

解决方案


您必须与前端建立持久的套接字连接。建立持久连接后,您必须侦听特定事件,然后发送实时用户数据。
您可以通过以下方式实现:

服务器.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以从服务器获取响应。

像这样的东西可以在前端 角度实现


推荐阅读