marauders-map

service port announcer and finder

marauders map

var reveal = require('marauders-map').reveal,
    http = require('http')
 
var address = http.createServer(function (reqres) {
  res.end('hello from web')
}).listen().address()
 
reveal({
  name: 'web', //name of the service 
  domain: 'lvh.me', //only accepts requests for the domain 'lvh.me' 
  subdomain: 'www', //only accepts requests for the subdomain 'www' 
  port: address.port,
  routes: {
    '/:method/:number': [], //accepts all methods for this route 
    '/:method': ['put'] //only accepts PUT methods for this route 
  }
})
var seek = require('marauders-map').map(),
    proxy = require('http-proxy'),
    request = require('request')
 
proxy.createServer(function (reqresproxy) {
  var node = seek(req)
 
  proxy.proxyRequest(req, res, {
    host: 'localhost',
    port: node.port
  })
}).listen(1337)
 
request('http://www.lvh.me:1337/get/5', function (eresbody) {
  assert(body === 'hello from web')
})

lvh.me is a domain that points to your local virtual host. nslookup for lvh.me shows the address as 127.0.0.1 (http://pivotallabs.com)

node-proxy is a full-featured http proxy for node.js

npm install marauders-map
npm test
  • improve documentation
  • write examples
var seek = require('marauders-map').map()

Returns a function to seek nodes

Node parameters:

  • name required
  • port optional
  • domain optional
  • subdomain optional
  • routes optional

Return a node if finds one

turnout

Only turnout >= 0.0.5

var reveal = require('marauders-map').reveal,
    router = require('turnout')(),
    require('http')
 
var address = http.createServer(function (reqres) {
  router(req, res, function () {
    res.statusCode = 404
    res.end()
  })
}).listen().address()
 
router.post('/todo/:id', function (reqresparamsquery) {})
 
router.put('/todo/:id/:state', function (reqresparamsquery) {})
 
reveal({
  name: 'todo',
  port: address.port,
  routes: router.routes()
})

Even better, with blage

var reveal = require('marauders-map').reveal,
    router = require('turnout')(),
    blage = require('blage'),
    require('http')
 
var address = http.createServer(blage(router)).listen().address()
 
router.post('/todo/:id', function (reqresparamsquery) {})
router.put('/todo/:id/:state', function (reqresparamsquery) {})
 
reveal({
  name: 'todo',
  port: address.port,
  routes: router.routes()
})
[
  {
    "name": "a",
    "subdomain": "zmeyyjxusi",
    "port": 8147
  },
  {
    "name": "c",
    "subdomain": "zmeyyjxusi",
    "port": 6078,
    "routes": {
      "/:method/:number": [],
      "/:method": ["put"]
    }
  },
  {
    "name": "d",
    "port": 5237,
    "routes": {
      "/:method/:number": ["get", "post", "delete"],
      "/:method": ["put"]
    }
  },
  {
    "name": "e",
    "port": 3617,
    "routes": {
      "/": []
    }
  },
  {
    "name": "f",
    "port": 9508
  },
  {
    "name": "g",
    "domain": "llvm.me",
    "subdomain": "zmeyyjxusi",
    "port": 81471
  },
  {
    "name": "h",
    "domain": "llvm.me",
    "subdomain": "zmeyyjxusi",
    "port": 80471,
    "routes": {
      "/:method/:number": ["get", "post", "delete"],
      "/:method": ["put"]
    }
  },
  {
    "name": "l",
    "domain": "llvm.me",
    "port": 95081
  }
]

MIT