node.js - 如何设置 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>
解决方案
您必须与前端建立持久的套接字连接。建立持久连接后,您必须侦听特定事件,然后发送实时用户数据。
您可以通过以下方式实现:
服务器.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以从服务器获取响应。
像这样的东西可以在前端 角度实现
推荐阅读
- java - 如何在android NavigationComponent中手动关闭片段
- dart - 在一行中对齐 TextField 和 FlatButton
- python-3.x - Matplotlib 切换数据源后返回图形开头
- visual-studio - 在 Chrome 中运行 Jasmine 测试
- angular - 我们如何创建 Angular 5/6/7 反时钟倒计时(毫秒)?
- python - Python - 将文本文件中的字符串转换为特定的数据类型
- react-native - 在三元运算符中不工作状态的样式
- angular - 未从表单提交的动态值
- ruby - 使用 Heroku 运行控制台时,LoadError 找不到 dm-postgres-adapter
- python-3.x - Pyspark替换RDD中的多个字符串