wzp
2021-05-13 7d694a9113118daec5be7ac224dab46a3b20f106
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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();