Push module for Mono
npm install --save mono-push
Then, in your configuration file of your Mono application (example: conf/application.js
):
module.exports = {
mono: {
modules: [
'mono-mongodb',
'mono-push'
]
}
}
mono-push requires mono-mongodb, so it must be installed and declared before mono-push because modules are loaded synchronously
mono-push will use the push
property of your configuration:
io
: Activate push event via socket.io- Type:
boolean
- Default:
false
- Requires: mono-io
- Type:
collectionName
: Collection name in MongoDB- Type:
string
- Default:
'mono-pushes'
- Type:
Example of activating socket.io
and writing events in pushes
collection (conf/application.js
):
module.exports = {
mono: {
modules: [
'mono-mongodb', // Required by mono-push
'mono-io', // Required by mono-push when io is true
'mono-push'
],
push: {
io: true,
collectionName: 'pushes'
}
}
}
In your files, you can access the push
and pushAll
methods like this:
push(event: string, query: object = {}, payload: object = {})
pushAll(event: string, payload: object = {})
const { push, pushAll } = require('mono-push')
await push('notification', { userId: '...' }, { type: 'email' })
// userId will be matched against authenticated users
await pushAll('message', { message: 'Welcome!' })
// Send it to all connected devices
With conf io: true
, mono-push will emit an event to every socket connected that matches the query.
On client-side, the user must connect with the socket.io-client:
import io from 'socket.io-client'
const socket = io('http://localhost:8000/push')
const token = '...' // JWT generate by await jwt.generateJWT(session), see Mono
socket.on('connect', () => {
socket
.emit('authenticate', { token })
.on('authenticated', function () {
console.log('Authenticated')
})
.on('unauthorized', function (msg) {
console.log('Unauthorized')
})
// Listen on push events
socket.on('my-event', (event) {
// event is { message: 'Welcome!' }
})
})