Organizing Socket.IO applications
Now that we have a chat lobby on the index page of our application, it's a bit odd that users have to reload the page (and lose the chat history) to find out about new games. We can use Socket.IO to update these as well.
Exposing real-time updates to the model
First, we'll need our games service itself to expose events for when games are added or removed. Here we use the Mongoose-provided post
method to hook into persistence operations on games as given here src/services/games.js
:
'use strict'; const EventEmitter = require('events'); const emitter = new EventEmitter(); module.exports = (mongoose) => { let Game = mongoose.models['Game']; if (!Game) { let Schema = mongoose.Schema; let gameSchema = new Schema({ word: String, setBy: String }); ... gameSchema.post('save', game => emitter.emit('gameSaved', game)); gameSchema.post('remove', game => ...