Node.js RESTful socket.io router - Minimalistic Style
npm install circuitscircuits
====

A simple socket-io framework for client and server communcation around CRUD operations
install using npm
npm install circuits
Basic client server example source
``coffeeport to listen to
testPort = 8001create a server
httpServer = http.Server()instantiate a Circuits server with a controller router
server = new Server httpServer, (controller)->
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" : (message, id, cb)->
# the first argument for the callback is
cb(null,message)
}
httpServer.listen testPort
client = sioc.connect("http://localhost:#{testPort}")
client.on 'connect', ->
client.emit Operation, 'echo', CRUD.read, 'any bats in here?',(err, data)->
if (data == 'any bats in here?')
console.log 'No bats here I guess..'
process.exit()
`
ToDo:
Example using Circuits with a Backbone model
Example using Circuits with a Backbone collection
Example using Circuits with Express framework
#### create Circuits server instance
new circuits.Server( httpServer, controllerResolver, [acl, redisHost, redisDB, redis, redisPort, circuitChannel] )
- httpServer instance of require('http').ServercontrollerResolver
- 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 tocrudOp | circuits.CRUD.{create,read..} | the crud operationparams | Object | parameters to be passedoperation 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 iddata | 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 groupscontroller+crud groups | function(userID, callback = function(err, groups)) | function that returns groups for a given user IDoptional 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
`javascript``
{
"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