Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,13 @@ The public path that the middleware is bound to.

_Best Practice: use the same `publicPath` defined in your webpack config. For more information about `publicPath`, please see [the webpack documentation](https://webpack.js.org/guides/public-path)._

### historyApiFallback

type: `Boolean`
Default: `false`

When using the HTML5 History API, the index.html page will likely have to be served in place of any 404 responses. Enable historyApiFallback by setting it to true

### stats

Type: `Boolean|String|Object`
Expand Down
4 changes: 4 additions & 0 deletions src/options.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@
}
]
},
"historyApiFallback": {
"description": "When using the HTML5 History API, the index.html page will likely have to be served in place of any 404 responses. Enable historyApiFallback by setting it to true",
"type": "boolean"
},
"stats": {
"description": "Stats options object or preset name.",
"anyOf": [
Expand Down
8 changes: 7 additions & 1 deletion src/utils/getFilenameFromUrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,14 @@ export default function getFilenameFromUrl(context, url) {
filename = path.join(outputPath, querystring.unescape(pathname));
}

let fsStats;
if (
!context.outputFileSystem.existsSync(filename) &&
options.historyApiFallback
) {
filename = path.join(outputPath);
}

let fsStats;
try {
fsStats = context.outputFileSystem.statSync(filename);
} catch (_ignoreError) {
Expand Down
21 changes: 21 additions & 0 deletions test/middleware.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2566,6 +2566,27 @@ describe.each([
});
});

describe("historyApiFallback option", () => {
describe("index.html page will likely have to be served in place of any 404 responses", () => {
beforeAll((done) => {
const compiler = getCompiler(webpackConfig);

instance = middleware(compiler, { historyApiFallback: true });

app = framework();
app.use(instance);

listen = listenShorthand(done);
});

afterAll(close);

it('should return the "200" code for the "GET" request', (done) => {
request(app).get("/foo/bar/baz").expect(200, done);
});
});
});

describe("serverSideRender option", () => {
let locals;

Expand Down
4 changes: 4 additions & 0 deletions test/validation-options.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ describe("validation", () => {
success: ["/foo", "", "auto", () => "/public/path"],
failure: [false],
},
historyApiFallback: {
success: [true],
failure: [],
},
serverSideRender: {
success: [true],
failure: ["foo", 0],
Expand Down