gpt4 book ai didi

node.js - 使用套接字 io 实时获取数据不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:39 25 4
gpt4 key购买 nike

我是平均堆栈的新手,我遵循了一些有关如何获取实时数据的说明。我尝试了每一个步骤,但都不起作用,我怎样才能正确使用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;
}
});
}
});

users.html

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

最佳答案

首先,您需要获取带有 connection 事件的套接字:

io.on('connect', function(socket){

您需要在要回复数据的特定事件上设置“监听器”

加在一起将是:

io.on('connect', function(socket){
socket.on('eventYouGet', function(eventData) {
User.find({}, function(err, users) {
if (!users) {
socket.emit('eventAnswer', {success: false, message: 'Users not found'});
} else {
socket.emit('eventAnswer', {success: true, users: users)};
}
});
});
});

其中 eventYouGet 是您(从服务器 Angular )正在等待的事件(类似于 REST 中的请求); eventAnswer 是您作为答案发送(给客户端)的事件。

注意:socket.emit 向发送者发送一个事件,而没有其他人(一个套接字)

关于node.js - 使用套接字 io 实时获取数据不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54370163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com