当用户与数据库进行交互时,我想在Angular(6)应用程序中进行实时更新,因此我正在使用socket.io进行此操作。
例如,我有一个工作组件/表单/服务,而我目前的做法是:
job
中的job-form
提交给job.service
:这会调用一个http帖子来表达(并返回可观察到的内容):
return this.http.post(api_url + '/jobs/', job);
将job
插入mongoDB并返回成功
socket.service
上调用向服务器发出套接字消息的函数socket.service
听到此消息并更新job.service
中的作业这很好用,但似乎很费劲...有更好的方法吗?我可以使用套接字并绕过Express REST API吗?
答案 0 :(得分:0)
基本上,您是将作业发布到服务器上,然后在客户端上获得成功,然后再次通过套接字推送成功,然后通过socket.io流向前端的其他人。 更好的方法是通过套接字发出新作业,在套接字中您可以保存新作业,成功后可以向所有人发出。 另一种方法是侦听mongoDB(https://www.mongodb.com/blog/post/an-introduction-to-change-streams)中的更改并散发给其他人。
也许最好的方法是这样:
const app = express();
const server = require('http').Server(app);
const io = require('socket.io').listen(server);
app.set('socketio', io);
例如,在您的路线中,您可以执行以下操作:
var io = req.app.get('socketio');
io.emit('room', 'hi'); // this will emit 'hi' in room 'room'