2.1.0 • Published 8 years ago

@stipsan/express-history-api-fallback v2.1.0

Weekly downloads
1
License
ISC
Repository
github
Last release
8 years ago

ATTENTION, THIS IS JUST A TEMPORARY FORK

I just needed to use callbacks instead of being limited to res.sendFile as I use React server side rendering instead of a static index.html file.

express-history-api-fallback

A tiny, accurate, fast Express middleware for single page apps with client side routing.

Build Status codecov.io

NPM

Works as a middleware for Express v4.8.0 or later. Can be used as either an application middleware or a router middleware.

import fallback from 'express-history-api-fallback'
import express from 'express'
const app = express()
const root = `${__dirname}/public`
app.use(express.static(root))
app.use(fallback('index.html', { root }))

Or in ECMAScript 5:

var fallback = require('express-history-api-fallback')
var express = require('express')
var app = express()
var root = __dirname + '/public'
app.use(express.static(root))
app.use(fallback('index.html', { root: root }))

fallback(path, options)

Returns a middleware for use by Express applications and routers.

Arguments are passed to Response.sendFile() in Express v4.8.0 or later.

Absolute path:

app.use(fallback(__dirname + '/dist/app.html'))

Relative path:

app.use(fallback('dist/app.html', { root: __dirname }))

path

Location of the HTML file containing single page app entry point.

Unless the root option is set in the options object, path must be an absolute path of the file.

options

Valid options are maxAge, root, lastModified, headers, and dotfiles. See Response.sendFile() for details.

But doesn't this already exist?

Yes, but this implementation is much better.

  • Only for GET requests: The fallback should not serve your index.html for POST or other requests.
  • Only for HTML requests: Never serve mistakenly for JS or CSS or image or other static file requests. Less debugging headaches.
  • Only when needed: Serve the fallback only when the file is missing.
  • High performance: Let res.sendFile() in Express >=4.8.0 do the heavy lifting of serving the file.
  • Minimal code: Just a few lines. No magic. No complexity.

See the blog post "Single Page App Routing with Express & Node.js" for an overview of the problems with alternative middlewares.