0.1.0 • Published 6 years ago

sharedb-server-query v0.1.0

Weekly downloads
4
License
MIT
Repository
github
Last release
6 years ago

sharedb-server-query

ShareDB server-query plugin. It allows to subscribe to named server-defined queries. It does not deny arbitrary client queries, so use additional middleware to restrict access.

Install

With npm do:

npm install sharedb-server-query

Usage

On the server:

require('sharedb-server-query')(backend);

// Add server queries  

// function addServerQuery accept
// 'collection' - collection name
// 'queryName'  - name of query
// 'cb' - function that accepts 'params' and runned in 'req' context
// and returns a query-object or throws error

backend.addServerQuery('items', 'main', function(params) {
    return { type: 'public' };
});

backend.addServerQuery('items', 'myItems', function(params) {
    return { ownerId: this.agent.userId };
});

backend.addServerQuery('items', 'byType', function(params) {

// ++++++++++++++++++++++++++++
// Should check params here!!!!
// it's a security issue
// ++++++++++++++++++++++++++++

    return { type: params.type };
});

Using queries in derby/racer:

  // function serverQuery accepts 3 arguments:
  // 'collection' - collection name (should match one from addServerQuery)
  // 'queryName' - name of query (should match one from addServerQuery)
  // 'params' - object with query-params

  derby.use(require('sharedb-server-query/racer'));

  //...
  
  var query = model.serverQuery('items', 'byType', {
    type: 'global'
  });

  model.subscribe(query, function(){
    page.render('home');
  });

What is still allowed:

// You still can use one-item fetch/subscriptions
var itemId = params.itemId

var item = model.at('items.'+itemId);

model.subscribe(item,  function(){
  //...
});

// Or just
model.subscribe('items.' + itemId,  function(){
  //...
});