nesquirk
v4.0.1
Published
Ties Nes + minimongo together for gloryful reactive apps.
Downloads
9
Maintainers
Readme
Nesquirk
Ties Nes + minimongo together for gloryful reactive apps.
Server
const Hapi = require('hapi')
const Nesquirk = require('nesquirk')
const server = new Hapi.Server()
server.connection({ host: 'localhost', port: 3000 })
server.register(Nesquirk, () => {
// Declare a nesquirk subscription
// opts are Nes server.subscription options
server.nq.subscription('/item/{_id}', opts, (socket, path, params, reply) => {
// Get your initial object, reply(obj)
})
// Behind the scenes, the callback is attached to opts.onSubscribe
// We call socket.publish for sending results, and then next
})
Managing the subscription
We don't keep subscription documents in memory, so you have to maintain your subscriptions, just like with Nes
.
// Single item (_id) must be in the url, or in the update obj to work
server.nq.update('/item/{_id}', { _id: '59527fc54cad8b7efd5f5835', status: 'complete' })
// Multiple items
server.nq.add('/items', { _id: '5953813562844d958c6f6815', status: 'pending' })
server.nq.add('/items', [/* ... */]) // Also pass arrays here (and update/remove)
server.nq.update('/items', { _id: '5953813562844d958c6f6815', status: 'active' }) // Note: needs _id in object(s) to merge
server.nq.remove('/items', '5953813562844d958c6f6815') // Note: only pass ID(s)
Client
const { Client, Collection } = require('nesquirk')
const client = new Client('ws://localhost:3000')
// A mingo backed minimongo collection
const Items = new Collection('items')
client.connect((err) => {
// Hook the '/items' publication up to the Items collection
const handle = client.subscribe('/items', Items, (err) => {
console.log('Ready or error')
})
// Stop
handle.stop() // or
client.unsubscribe('/items', Items)
})
React
More typically, you'll use the nesquirk
React components to manage your subscriptions and retrieve data from minimongo collections.
main.js
import React from 'react'
import ReactDOM from 'react-dom'
import { Client, Provider } from 'nesquirk'
import MyComponent from './MyComponent'
// Setup the client connection
const client = new Client('ws://localhost:3000')
client.connect((err) => { if (err) console.error('Failed to connect', err) })
// The Provider allows you to gain access to the client from child components
// using the `withClient` helper (see below)
ReactDOM.render(
<Provider client={client}>
<MyComponent />
</Provider>,
document.getElementById('root')
)
MyComponent.js
import React from 'react'
import { createContainer } from 'nesquirk'
import Items from './Items'
const MyComponent = ({ items }) => items.map((i) => <div>{i._id}</div>)
export default createContainer(function (props) {
// Subscribe - will be auto unsubscribed on componentWillUnmount
// Hooks the Items collection up to the '/items' subscription
const handle = this.subscribe('/items', Items)
// Fetch any data from your collections
return {
items: Items.find().all(),
loading: !handle.ready()
}
}, MyComponent))
Items.js
import { Collection } from 'nesquirk'
export default new Collection('items')