Seneca Microservice support for Node.js


Introduction

Seneca is a microservices toolkit for Node.js. It provides plugins that look after the foundations of app. For more information, see Seneca Microserviceexternal link.

Objects

This extension, when Seneca library is found in the source code, may create the following objects:

Icon Description
Add NodeJS Seneca
Act NodeJS Seneca
NodeJS Get Operation
NodeJS Post Operation
NodeJS Put Operation
NodeJS Delete Operation
NodeJS Patch Operation

Example

Create a service via web-app.js:

var seneca = require('seneca')()

seneca
  .use('user')
  .use('auth')
  .use('../lib/api.js')
  .client({port:10202,pin:{role:'offer',cmd:'*'}})
  .client({port:10201,pin:{role:'user',cmd:'*'}})

var app = express()

app.use( bodyParser.json() )
app.use( seneca.export('web') )
app.use( express.static('./public') )

app.listen(3000)

offer-service:

require('seneca')()
  .use('../lib/offer')
  .listen(10202)
  .ready(function(){
    this.act({role:'offer',cmd:'provide'},console.log)
  })

Define the api.js:

module.exports = function( options ) {
var seneca = this
var plugin = 'api'

seneca.add( {role:plugin, end:'offer'}, end_offer)

function end_offer( args, done ) {
var user = args.req$.seneca.user || {}

this.act('role:offer,cmd:provide',{nick:user.nick},done)
}

seneca.act({role:'web', use:{
  prefix:'/api/',
  pin:{role:plugin,end:'*'},
  map:{
    'offer': { GET:true },
  }
}})

return {name:plugin};
}

offer.js:

module.exports = function( options ) {
  var seneca = this
  var plugin = 'offer'

  seneca.add( {role:plugin, cmd:'provide'}, cmd_provide)

  function cmd_provide( args, done ) {
    if( args.nick ) return done(null,{product:'Apple'});

    return done(null,{product:'Orange'});
  }

  return {name:plugin};
}

When a service sends an action (seneca.act()):

Webservice RestAPI:

...
seneca.act('role:web',{use:{
  prefix:'/product',
  pin:'role:api,product:*',
  startware: verify_token,
  map:{
    star: {
      GET:true,
      alias:'/:id/star'
    },
    handle_star:{
      PUT:true,
      DELETE:true,
      POST:true,
      PATCH:true,
      alias:'/:id/star'
    }
  }
...