circuits
A simple socket-io framework for client and server communcation around CRUD operations
Usage
install using npm
npm install circuits
Basic client server example source
# port to listen to testPort = 8001# create a server httpServer = httpServer# instantiate a Circuits server with a controller router server = httpServer switch controller # match against the requested router to a specific one # every router needs to implement the CRUD operation # it needs to support when 'echo' then "read" : # the first argument for the callback is cbnullmessage httpServerlisten testPort client = siocconnect"http://localhost:" clienton 'connect'-> clientemit Operation'echo'CRUDread'any bats in here?' if data == 'any bats in here?' consolelog 'No bats here I guess..' processexit
ToDo: Example using Circuits with a Backbone model Example using Circuits with a Backbone collection Example using Circuits with Express framework
Whats in the box?
create Circuits server instance
new circuits.Server( httpServer, controllerResolver, [acl, redisHost, redisDB, redis, redisPort, circuitChannel] )
httpServer
instance ofrequire('http').Server
controllerResolver
function that returns an object with mapping to CRUD operation for provided controller nameacl
the ACL object, if none provided it allowes everythingredisHost
IP address of your redis (default is "127.0.0.1")redisDB
redis db to use (default is 10 )redisPort
redis port (deault is 6379)circuitChannel
name space for communication between Circuits instances
messages
circuits.Messages
is a map of String => String of supported Circuits messages
the Operation
message is a request for a message to be dispatched to respective controller on the server
arguments
name | type | description |
---|---|---|
controller name |
String |
the controller to dispatch this message to |
crudOp |
circuits.CRUD.{create,read..} |
the crud operation |
params |
Object |
parameters to be passed |
operation params |
Object* |
depending on the CRUD operation, a set of required fields |
required operation params
for the different CRUD operations
CRUD.create
name | type | description |
---|---|---|
data |
Object |
the object to be created |
CRUD.read
name | type | description |
---|---|---|
id |
String |
resource id |
CRUD.update
name | type | description |
---|---|---|
id |
String |
resource id |
data |
Object |
the object to update with |
CRUD.delete
name | type | description |
---|---|---|
id |
String |
resource id |
CRUD operations
circuits.CRUD
is simply a map of String => String of
create
, read,
update, delete
and patch
ACL
circuits.ACL
constructor arguments
name | type | description |
---|---|---|
rules |
Object |
mapping of controllers to allowed crud operations and respective user groups |
controller+crud groups |
function(userID, callback = function(err, groups)) |
function that returns groups for a given user ID |
optional check |
function(userID, model, modelId, crudOp, callback = function(message,boolean) |
an optional check for special cases were you want to enforce a finer grained ACL, for example for when only a creater of a resource is only allowed to do a write operation on that model.. |
example of a controller+crud group rules
"MyModel" : "create" : "public" "read" : "public" "update" : "users" "delete" : "SecretModel" : "create" : "users" "read" : "users" "update" : "users" "delete" : "users"
is simply an object mapping controllers to respective allowed crud operations