Allow to have middleware for the path same with a HTML page

HTTP allows to change the type of the content to serve by Accept field in
the request. The middleware for the path same with a HTML page will
be inserted before the HTML renderer, and can take advantage of this
feature, using expressjs's "accepts" method, for example.
This commit is contained in:
Akihiko Odaki
2018-04-15 23:11:08 +09:00
parent 2758382c68
commit 917dd60cc3
5 changed files with 344 additions and 252 deletions

View File

@@ -2,13 +2,35 @@ const assert = require('assert');
const { create_routes } = require('../../dist/core.ts.js');
describe('create_routes', () => {
it('sorts handlers correctly', () => {
const routes = create_routes({
files: ['foo.html', 'foo.js']
});
assert.deepEqual(
routes.map(r => r.handlers),
[
[
{
type: 'route',
file: 'foo.js'
},
{
type: 'page',
file: 'foo.html'
}
]
]
);
});
it('sorts routes correctly', () => {
const routes = create_routes({
files: ['index.html', 'about.html', 'post/f[xx].html', '[wildcard].html', 'post/foo.html', 'post/[id].html', 'post/bar.html', 'post/[id].json.js']
});
assert.deepEqual(
routes.map(r => r.file),
routes.map(r => r.handlers[0].file),
[
'index.html',
'about.html',
@@ -40,7 +62,7 @@ describe('create_routes', () => {
});
assert.deepEqual(
routes.map(r => r.file),
routes.map(r => r.handlers[0].file),
[
'4xx.html',
'5xx.html',
@@ -76,7 +98,7 @@ describe('create_routes', () => {
});
assert.deepEqual(
routes.map(r => r.file),
routes.map(r => r.handlers[0].file),
[
'4xx.html',
'5xx.html',
@@ -106,7 +128,7 @@ describe('create_routes', () => {
for (let i = 0; i < routes.length; i += 1) {
const route = routes[i];
if (params = route.exec('/post/123')) {
file = route.file;
file = route.handlers[0].file;
break;
}
}
@@ -123,7 +145,7 @@ describe('create_routes', () => {
});
assert.deepEqual(
routes.map(r => r.file),
routes.map(r => r.handlers[0].file),
[
'index.html',
'e/f/g/h.html'
@@ -140,12 +162,12 @@ describe('create_routes', () => {
});
assert.deepEqual(
a.map(r => r.file),
a.map(r => r.handlers[0].file),
['foo/[bar].html', '[baz]/qux.html']
);
assert.deepEqual(
b.map(r => r.file),
b.map(r => r.handlers[0].file),
['foo/[bar].html', '[baz]/qux.html']
);
});
@@ -155,13 +177,7 @@ describe('create_routes', () => {
create_routes({
files: ['[foo].html', '[bar]/index.html']
});
}, /The \[foo\].html and \[bar\]\/index.html routes clash/);
assert.throws(() => {
create_routes({
files: ['foo.html', 'foo.js']
});
}, /The foo.html and foo.js routes clash/);
}, /The \[foo\] and \[bar\]\/index routes clash/);
});
it('matches nested routes', () => {
@@ -184,7 +200,7 @@ describe('create_routes', () => {
});
assert.deepEqual(
routes.map(r => r.file),
routes.map(r => r.handlers[0].file),
['settings.html', 'settings/[submenu].html']
);
});