Skip to content

stealjs/steal-push

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

steal-push

Build Status npm version

steal-push is server middleware for HTTP2 push. Using steal-tools you can create a bundle manifest that species which modules need to be loaded for each bundle. steal-push uses this manifest file to push files when a given route is used.

steal-push also works with HTTP1 servers, adding a Link header which tells the browser to begin fetching/parsing the assets.

Install

npm install steal-push --save

Setup

Before using steal-push you must generate a bundle manifest from steal-tools like so:

stealTools.build(config, {
	bundleManifest: true
});

Usage

steal-push can be used in plain Node web servers, or in express apps.

Node

const http2 = require("spdy");
const stealPush = require("steal-push");

const pushMain = stealPush("main");
const pushOrders = stealPush("orders");


function app(req, res) {
  if(req.url === "/") {
    pushMain(req, res);
    res.send("<body>Hello world!</body>");
  } else {
    pushOrders(req, res);
    res.send("<body><h1>Orders</h1> ... </body>");
  }
}


spdy.createServer({
  key: fs.readFileSync("path/to/key.pem"),
  cert: fs.readFileSync("path/to/cert.pem"),
  spdy: {
    protocols: ["h2", "http/1.1"]
  }
}, app).listen(8080);

Express

const express = require("express");
const fs = require("fs");
const stealPush = require("steal-push");
const spdy = require("spdy");

const app = express();
const server = spdy.createServer({
  key: fs.readFileSync("path/to/key.pem"),
  cert: fs.readFileSync("path/to/cert.pem"),
  spdy: {
    protocols: ["h2", "http/1.1"]
  }
}, app);

app.get("/",
  stealPush("main"),
  function(req, res){
    // Resources have already been pushed, just send the html
    res.send("<body>Hello world!</body>");
  });

app.get("/order/details",
  stealPush("orders"),
  function(req, res){
    res.send("<body><h1>Orders</h1> ... </body>");
  });

server.listen(8080);

StealPush constructor

The StealPush constructor can be used to configure things such as the server root, and the location of the manifest file. Typical usage looks like:

const StealPush = require("steal-push").StealPush;

const stealPush = new StealPush({
	manifest: "dist/bundles.json",
	root: __dirname + "/assets",
	serverRoot: "/app"
});

app.get("/",
	stealPush.for("main"),
	function(req, res){
		...
	});

StealPush#for

The for() method on the StealPush object is used to create a function that takes a request and response object.

License

MIT