sharedb-server-query

0.1.0 • Public • Published

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(){
  //...
});

Readme

Keywords

Package Sidebar

Install

npm i sharedb-server-query

Weekly Downloads

0

Version

0.1.0

License

MIT

Unpacked Size

7.94 kB

Total Files

7

Last publish

Collaborators

  • balek