@seedalpha/request-emitter

Convert stream into an opinionated req/res handler

Usage no npm install needed!

<script type="module">
  import seedalphaRequestEmitter from 'https://cdn.skypack.dev/@seedalpha/request-emitter';
</script>

README

request-emitter

Convert stream into an opinionated req/res handler

Installation

$ npm install git+ssh://git@github.com:seedalpha/request-emitter.git

Usage

server
var shoe = require('shoe');
var http = require('http');
var express = require('express');
var RequestEmitter = require('request-emitter');

var app = express();
var server = http.Server(app);

var api = {
  hello: function(message, callback) {
    callback(null, 'Hello ' + message);
  }
};

var sock = shoe(function(stream) {

  var client = new RequestEmitter();

  client.on('request', function(name, args, callback) {
    args.push(callback);
    if (!api[name]) return; // die quietly
    api[name].apply(api, args);
  });

  stream.pipe(client.getStream()).pipe(stream);
});

server.listen(process.env.PORT || 3000);
sock.install(server, '/sock');
client (via browserify)
var shoe = require('shoe');
var RequestEmitter = require('request-emitter');
var client = new RequestEmitter();

client.request('hello', 'world', function(error, result) {
  console.log(error, result); // null, 'Hello world'
});

var stream = shoe('/sock');
stream.pipe(client.getStream()).pipe(stream);

Pipeline

browser
|
request router (request-emitter)
|
event-emitter (remote-emitter)
|
node-streams (shoe)
|
websocket (sock.js)
|
(ajax 1, ajax 2, long-polling, web-sockets (1,2, alpha, etc.))
|
websocket (sock.js)
|
node-streams (shoe)
|
event-emitter (remote-emitter)
|
request router (request-emitter)
|
server

Author

Vladimir Popov vlad@seedalpha.net

License

©2014 Seedalpha