homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge
127 lines (113 loc) • 3.21 kB
text/typescript
import * as Router from '../..';
import { Http2ServerRequest, Http2ServerResponse } from 'http2';
import { IncomingMessage, ServerResponse } from 'http';
let http1Req!: IncomingMessage;
let http1Res!: ServerResponse;
let http2Req!: Http2ServerRequest;
let http2Res!: Http2ServerResponse;
// ==== HTTP1 ====
const http1Router = Router({
defaultRoute(req, res) {
const request: IncomingMessage = req;
const response: ServerResponse = res;
response.end(request.url);
},
onBadUrl(path, req, res) {
const request: IncomingMessage = req;
const response: ServerResponse = res;
response.end(request.url + path);
}
});
http1Router.on('GET', '/test', (req, res) => res.end(req.url));
http1Router.on('GET', '/test', { version: '2.0.0' }, (req, res) =>
res.end(req.url)
);
http1Router.on('GET', '/test', (req, res) => res.end(req.url), { foo: 'bar' });
http1Router.on(
['POST', 'PUT'],
'/test',
{ version: '1.0.0' },
(req, res) => res.end(req.url),
{ foo: 'bar' }
);
http1Router.delete(
'/item/:id',
(req, res, params, store) => {
const id: string | undefined = params.id;
res.end(`
url: ${req.url || '-'},
id: ${id || '-'},
foo: ${store.foo}
`);
},
{ foo: 'bar' }
);
(function http1RouterFind() {
const result = http1Router.find('GET', '/test', '1.0.0');
if (!result) {
return;
}
const { handler, params, store } = result;
handler(http1Req, http1Res, params, store);
})();
http1Router.lookup(http1Req, http1Res);
http1Router.lookup(http1Req, http1Res, {foo: 'bar'});
http1Router.off('GET', '/path');
http1Router.off(['GET', 'CHECKOUT'], '/path');
http1Router.prettyPrint();
http1Router.reset();
// ==== HTTP2 ====
const http2Router = Router<Router.HTTPVersion.V2>({
allowUnsafeRegex: true,
caseSensitive: false,
ignoreTrailingSlash: true,
maxParamLength: 200,
defaultRoute(req, res) {
const request: Http2ServerRequest = req;
const response: Http2ServerResponse = res;
response.end(request.url);
},
onBadUrl(path, req, res) {
const request: Http2ServerRequest = req;
const response: Http2ServerResponse = res;
response.end(request.url + path);
}
});
http2Router.on('GET', '/test', (req, res) => res.end(req.url));
http2Router.on('GET', '/test', { version: '2.0.0' }, (req, res) =>
res.end(req.url)
);
http2Router.on('GET', '/test', (req, res) => res.end(req.url), { foo: 'bar' });
http2Router.on(
['POST', 'PUT'],
'/test',
{ version: '1.0.0' },
(req, res) => res.end(req.url),
{ foo: 'bar' }
);
http2Router.delete(
'/item/:id',
(req, res, params, store) => {
const id: string | undefined = params.id;
res.end(`
url: ${req.url || '-'},
id: ${id || '-'},
foo: ${store.foo}
`);
},
{ foo: 'bar' }
);
(function http2RouterFind() {
const result = http2Router.find('GET', '/test', '1.0.0');
if (!result) {
return;
}
const { handler, params, store } = result;
handler(http2Req, http2Res, params, store);
})();
http2Router.lookup(http2Req, http2Res);
http2Router.lookup(http2Req, http2Res, {foo: 'bar'});
http2Router.off('GET', '/path');
http2Router.off(['GET', 'CHECKOUT'], '/path');
http2Router.prettyPrint();
http2Router.reset();