@eggjs/router 4.0.0-beta.20 → 4.0.0-beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EggRouter.d.ts +104 -5
- package/dist/EggRouter.js +238 -6
- package/dist/Layer.d.ts +114 -3
- package/dist/Layer.js +238 -3
- package/dist/Router.d.ts +494 -4
- package/dist/Router.js +776 -5
- package/dist/index.d.ts +7 -9
- package/dist/index.js +7 -11
- package/dist/types.d.ts +18 -2
- package/dist/types.js +2 -3
- package/package.json +5 -5
- package/dist/EggRouter-DcO6PAYI.d.ts +0 -108
- package/dist/EggRouter-DvjBpJdR.js +0 -208
- package/dist/Layer-Br45DupW.d.ts +0 -118
- package/dist/Layer-CPiRgFSm.js +0 -201
- package/dist/Router-BGI5feOg.d.ts +0 -496
- package/dist/Router-CWrZ5wcC.js +0 -676
- package/dist/types-CxAOQAAb.js +0 -1
- package/dist/types-DvonNcgV.d.ts +0 -21
package/dist/Router-CWrZ5wcC.js
DELETED
|
@@ -1,676 +0,0 @@
|
|
|
1
|
-
import { Layer } from "./Layer-CPiRgFSm.js";
|
|
2
|
-
import assert from "node:assert";
|
|
3
|
-
import methods from "methods";
|
|
4
|
-
import { debuglog } from "node:util";
|
|
5
|
-
import compose from "koa-compose";
|
|
6
|
-
import HttpError from "http-errors";
|
|
7
|
-
|
|
8
|
-
//#region src/Router.ts
|
|
9
|
-
const debug = debuglog("egg/router:Router");
|
|
10
|
-
var Router = class {
|
|
11
|
-
opts;
|
|
12
|
-
methods;
|
|
13
|
-
/** Layer stack */
|
|
14
|
-
stack = [];
|
|
15
|
-
params = {};
|
|
16
|
-
/**
|
|
17
|
-
* Create a new router.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
*
|
|
21
|
-
* Basic usage:
|
|
22
|
-
*
|
|
23
|
-
* ```javascript
|
|
24
|
-
* var Koa = require('koa');
|
|
25
|
-
* var Router = require('koa-router');
|
|
26
|
-
*
|
|
27
|
-
* var app = new Koa();
|
|
28
|
-
* var router = new Router();
|
|
29
|
-
*
|
|
30
|
-
* router.get('/', (ctx, next) => {
|
|
31
|
-
* // ctx.router available
|
|
32
|
-
* });
|
|
33
|
-
*
|
|
34
|
-
* app
|
|
35
|
-
* .use(router.routes())
|
|
36
|
-
* .use(router.allowedMethods());
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* @alias module:koa-router
|
|
40
|
-
* @param {Object=} opts optional
|
|
41
|
-
* @param {String=} opts.prefix prefix router paths
|
|
42
|
-
* @class
|
|
43
|
-
*/
|
|
44
|
-
constructor(opts) {
|
|
45
|
-
this.opts = opts ?? {};
|
|
46
|
-
this.methods = this.opts.methods ?? [
|
|
47
|
-
"HEAD",
|
|
48
|
-
"OPTIONS",
|
|
49
|
-
"GET",
|
|
50
|
-
"PUT",
|
|
51
|
-
"PATCH",
|
|
52
|
-
"POST",
|
|
53
|
-
"DELETE"
|
|
54
|
-
];
|
|
55
|
-
}
|
|
56
|
-
use(pathOrMiddleware, ...middlewares) {
|
|
57
|
-
if (Array.isArray(pathOrMiddleware) && typeof pathOrMiddleware[0] === "string") {
|
|
58
|
-
for (const path$1 of pathOrMiddleware) this.use(path$1, ...middlewares);
|
|
59
|
-
return this;
|
|
60
|
-
}
|
|
61
|
-
let path = "";
|
|
62
|
-
let hasPath = false;
|
|
63
|
-
if (typeof pathOrMiddleware === "string") {
|
|
64
|
-
path = pathOrMiddleware;
|
|
65
|
-
hasPath = true;
|
|
66
|
-
} else if (typeof pathOrMiddleware === "function") middlewares = [pathOrMiddleware, ...middlewares];
|
|
67
|
-
for (const m of middlewares) if (m.router) {
|
|
68
|
-
for (const nestedLayer of m.router.stack) {
|
|
69
|
-
if (path) nestedLayer.setPrefix(path);
|
|
70
|
-
if (this.opts.prefix) nestedLayer.setPrefix(this.opts.prefix);
|
|
71
|
-
this.stack.push(nestedLayer);
|
|
72
|
-
}
|
|
73
|
-
if (this.params) for (const key in this.params) m.router.param(key, this.params[key]);
|
|
74
|
-
} else this.register(path || "(.*)", [], m, {
|
|
75
|
-
end: false,
|
|
76
|
-
ignoreCaptures: !hasPath
|
|
77
|
-
});
|
|
78
|
-
return this;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Set the path prefix for a Router instance that was already initialized.
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
*
|
|
85
|
-
* ```javascript
|
|
86
|
-
* router.prefix('/things/:thing_id')
|
|
87
|
-
* ```
|
|
88
|
-
*
|
|
89
|
-
* @param {String} prefix prefix string
|
|
90
|
-
* @return {Router} router instance
|
|
91
|
-
*/
|
|
92
|
-
prefix(prefix) {
|
|
93
|
-
prefix = prefix.replace(/\/$/, "");
|
|
94
|
-
this.opts.prefix = prefix;
|
|
95
|
-
for (const layer of this.stack) layer.setPrefix(prefix);
|
|
96
|
-
return this;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Returns router middleware which dispatches a route matching the request.
|
|
100
|
-
*
|
|
101
|
-
* @return {Function} middleware function
|
|
102
|
-
*/
|
|
103
|
-
routes() {
|
|
104
|
-
const dispatch = (ctx, next) => {
|
|
105
|
-
const routerPath = this.opts.routerPath || ctx.routerPath || ctx.path;
|
|
106
|
-
const matched = this.match(routerPath, ctx.method);
|
|
107
|
-
debug("dispatch: %s %s, routerPath: %s, matched: %s", ctx.method, ctx.path, routerPath, matched.route);
|
|
108
|
-
if (ctx.matched) ctx.matched.push(...matched.path);
|
|
109
|
-
else ctx.matched = matched.path;
|
|
110
|
-
ctx.router = this;
|
|
111
|
-
if (!matched.route) return next();
|
|
112
|
-
const layerChain = matched.pathAndMethod.reduce((memo, layer) => {
|
|
113
|
-
memo.push((ctx$1, next$1) => {
|
|
114
|
-
ctx$1.captures = layer.captures(routerPath);
|
|
115
|
-
ctx$1.params = layer.params(routerPath, ctx$1.captures, ctx$1.params);
|
|
116
|
-
ctx$1._matchedRouteName = ctx$1.routerName = layer.name;
|
|
117
|
-
if (!layer.name) ctx$1._matchedRouteName = void 0;
|
|
118
|
-
ctx$1._matchedRoute = ctx$1.routerPath = layer.path;
|
|
119
|
-
return next$1();
|
|
120
|
-
});
|
|
121
|
-
return memo.concat(layer.stack);
|
|
122
|
-
}, []);
|
|
123
|
-
return compose(layerChain)(ctx, next);
|
|
124
|
-
};
|
|
125
|
-
dispatch.router = this;
|
|
126
|
-
return dispatch;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* @alias to routes()
|
|
130
|
-
*/
|
|
131
|
-
middleware() {
|
|
132
|
-
return this.routes();
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Returns separate middleware for responding to `OPTIONS` requests with
|
|
136
|
-
* an `Allow` header containing the allowed methods, as well as responding
|
|
137
|
-
* with `405 Method Not Allowed` and `501 Not Implemented` as appropriate.
|
|
138
|
-
*
|
|
139
|
-
* @example
|
|
140
|
-
*
|
|
141
|
-
* ```javascript
|
|
142
|
-
* var Koa = require('koa');
|
|
143
|
-
* var Router = require('koa-router');
|
|
144
|
-
*
|
|
145
|
-
* var app = new Koa();
|
|
146
|
-
* var router = new Router();
|
|
147
|
-
*
|
|
148
|
-
* app.use(router.routes());
|
|
149
|
-
* app.use(router.allowedMethods());
|
|
150
|
-
* ```
|
|
151
|
-
*
|
|
152
|
-
* **Example with [Boom](https://github.com/hapijs/boom)**
|
|
153
|
-
*
|
|
154
|
-
* ```javascript
|
|
155
|
-
* var Koa = require('koa');
|
|
156
|
-
* var Router = require('koa-router');
|
|
157
|
-
* var Boom = require('boom');
|
|
158
|
-
*
|
|
159
|
-
* var app = new Koa();
|
|
160
|
-
* var router = new Router();
|
|
161
|
-
*
|
|
162
|
-
* app.use(router.routes());
|
|
163
|
-
* app.use(router.allowedMethods({
|
|
164
|
-
* throw: true,
|
|
165
|
-
* notImplemented: () => new Boom.notImplemented(),
|
|
166
|
-
* methodNotAllowed: () => new Boom.methodNotAllowed()
|
|
167
|
-
* }));
|
|
168
|
-
* ```
|
|
169
|
-
*
|
|
170
|
-
* @param {Object=} options optional params
|
|
171
|
-
* @param {Boolean=} options.throw throw error instead of setting status and header
|
|
172
|
-
* @param {Function=} options.notImplemented throw the returned value in place of the default NotImplemented error
|
|
173
|
-
* @param {Function=} options.methodNotAllowed throw the returned value in place of the default MethodNotAllowed error
|
|
174
|
-
* @return {Function} middleware function
|
|
175
|
-
*/
|
|
176
|
-
allowedMethods(options) {
|
|
177
|
-
const implemented = this.methods;
|
|
178
|
-
return async function allowedMethods(ctx, next) {
|
|
179
|
-
await next();
|
|
180
|
-
if (ctx.status && ctx.status !== 404) return;
|
|
181
|
-
const allowed = {};
|
|
182
|
-
ctx.matched.forEach((route) => {
|
|
183
|
-
route.methods.forEach((method) => {
|
|
184
|
-
allowed[method] = method;
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
const allowedMethods$1 = Object.keys(allowed);
|
|
188
|
-
if (!implemented.includes(ctx.method)) if (options?.throw) {
|
|
189
|
-
let notImplementedThrowable;
|
|
190
|
-
if (typeof options?.notImplemented === "function") notImplementedThrowable = options.notImplemented();
|
|
191
|
-
else notImplementedThrowable = new HttpError.NotImplemented();
|
|
192
|
-
throw notImplementedThrowable;
|
|
193
|
-
} else {
|
|
194
|
-
ctx.status = 501;
|
|
195
|
-
ctx.set("Allow", allowedMethods$1.join(", "));
|
|
196
|
-
}
|
|
197
|
-
else if (allowedMethods$1.length > 0) {
|
|
198
|
-
if (ctx.method === "OPTIONS") {
|
|
199
|
-
ctx.status = 200;
|
|
200
|
-
ctx.body = "";
|
|
201
|
-
ctx.set("Allow", allowedMethods$1.join(", "));
|
|
202
|
-
} else if (!allowed[ctx.method]) if (options?.throw) {
|
|
203
|
-
let notAllowedThrowable;
|
|
204
|
-
if (typeof options?.methodNotAllowed === "function") notAllowedThrowable = options.methodNotAllowed();
|
|
205
|
-
else notAllowedThrowable = new HttpError.MethodNotAllowed();
|
|
206
|
-
throw notAllowedThrowable;
|
|
207
|
-
} else {
|
|
208
|
-
ctx.status = 405;
|
|
209
|
-
ctx.set("Allow", allowedMethods$1.join(", "));
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Redirect `source` to `destination` URL with optional 30x status `code`.
|
|
216
|
-
*
|
|
217
|
-
* Both `source` and `destination` can be route names.
|
|
218
|
-
*
|
|
219
|
-
* ```javascript
|
|
220
|
-
* router.redirect('/login', 'sign-in');
|
|
221
|
-
* ```
|
|
222
|
-
*
|
|
223
|
-
* This is equivalent to:
|
|
224
|
-
*
|
|
225
|
-
* ```javascript
|
|
226
|
-
* router.all('/login', ctx => {
|
|
227
|
-
* ctx.redirect('/sign-in');
|
|
228
|
-
* ctx.status = 301;
|
|
229
|
-
* });
|
|
230
|
-
* ```
|
|
231
|
-
*
|
|
232
|
-
* @param {String} source URL or route name.
|
|
233
|
-
* @param {String} destination URL or route name.
|
|
234
|
-
* @param {Number=} status HTTP status code (default: 301).
|
|
235
|
-
* @return {Router} router instance
|
|
236
|
-
*/
|
|
237
|
-
redirect(source, destination, status = 301) {
|
|
238
|
-
if (source[0] !== "/") {
|
|
239
|
-
const routeUrl = this.url(source);
|
|
240
|
-
if (routeUrl instanceof Error) throw routeUrl;
|
|
241
|
-
source = routeUrl;
|
|
242
|
-
}
|
|
243
|
-
if (destination[0] !== "/") {
|
|
244
|
-
const routeUrl = this.url(destination);
|
|
245
|
-
if (routeUrl instanceof Error) throw routeUrl;
|
|
246
|
-
destination = routeUrl;
|
|
247
|
-
}
|
|
248
|
-
return this.all(source, (ctx) => {
|
|
249
|
-
ctx.redirect(destination);
|
|
250
|
-
ctx.status = status;
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Create and register a route.
|
|
255
|
-
*
|
|
256
|
-
* @param {String|RegExp|(String|RegExp)[]} path Path string.
|
|
257
|
-
* @param {String[]} methods Array of HTTP verbs.
|
|
258
|
-
* @param {Function|Function[]} middleware Multiple middleware also accepted.
|
|
259
|
-
* @param {Object} [opts] optional params
|
|
260
|
-
* @private
|
|
261
|
-
*/
|
|
262
|
-
register(path, methods$1, middleware, opts) {
|
|
263
|
-
if (Array.isArray(path)) {
|
|
264
|
-
const routes = [];
|
|
265
|
-
for (const p of path) {
|
|
266
|
-
const route = this.#register(p, methods$1, middleware, opts);
|
|
267
|
-
routes.push(route);
|
|
268
|
-
}
|
|
269
|
-
return routes;
|
|
270
|
-
}
|
|
271
|
-
return this.#register(path, methods$1, middleware, opts);
|
|
272
|
-
}
|
|
273
|
-
#register(path, methods$1, middleware, opts) {
|
|
274
|
-
opts = opts ?? {};
|
|
275
|
-
const route = new Layer(path, methods$1, middleware, {
|
|
276
|
-
end: opts.end === false ? opts.end : true,
|
|
277
|
-
name: opts.name,
|
|
278
|
-
sensitive: opts.sensitive ?? this.opts.sensitive ?? false,
|
|
279
|
-
strict: opts.strict ?? this.opts.strict ?? false,
|
|
280
|
-
prefix: opts.prefix ?? this.opts.prefix ?? "",
|
|
281
|
-
ignoreCaptures: opts.ignoreCaptures
|
|
282
|
-
});
|
|
283
|
-
if (this.opts.prefix) route.setPrefix(this.opts.prefix);
|
|
284
|
-
for (const param in this.params) route.param(param, this.params[param]);
|
|
285
|
-
this.stack.push(route);
|
|
286
|
-
return route;
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Lookup route with given `name`.
|
|
290
|
-
*
|
|
291
|
-
* @param {String} name route name
|
|
292
|
-
* @return {Layer|false} layer instance of false
|
|
293
|
-
*/
|
|
294
|
-
route(name) {
|
|
295
|
-
for (const route of this.stack) if (route.name === name) return route;
|
|
296
|
-
return false;
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Generate URL for route. Takes a route name and map of named `params`.
|
|
300
|
-
*
|
|
301
|
-
* @example
|
|
302
|
-
*
|
|
303
|
-
* ```javascript
|
|
304
|
-
* router.get('user', '/users/:id', (ctx, next) => {
|
|
305
|
-
* // ...
|
|
306
|
-
* });
|
|
307
|
-
*
|
|
308
|
-
* router.url('user', 3);
|
|
309
|
-
* // => "/users/3"
|
|
310
|
-
*
|
|
311
|
-
* router.url('user', { id: 3 });
|
|
312
|
-
* // => "/users/3"
|
|
313
|
-
*
|
|
314
|
-
* router.use((ctx, next) => {
|
|
315
|
-
* // redirect to named route
|
|
316
|
-
* ctx.redirect(ctx.router.url('sign-in'));
|
|
317
|
-
* })
|
|
318
|
-
*
|
|
319
|
-
* router.url('user', { id: 3 }, { query: { limit: 1 } });
|
|
320
|
-
* // => "/users/3?limit=1"
|
|
321
|
-
*
|
|
322
|
-
* router.url('user', { id: 3 }, { query: "limit=1" });
|
|
323
|
-
* // => "/users/3?limit=1"
|
|
324
|
-
* ```
|
|
325
|
-
*/
|
|
326
|
-
url(name, params, ...paramsOrOptions) {
|
|
327
|
-
const route = this.route(name);
|
|
328
|
-
if (route) return route.url(params, ...paramsOrOptions);
|
|
329
|
-
return /* @__PURE__ */ new Error(`No route found for name: ${name}`);
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Generate URL from url pattern and given `params`.
|
|
333
|
-
*
|
|
334
|
-
* @example
|
|
335
|
-
*
|
|
336
|
-
* ```javascript
|
|
337
|
-
* var url = Router.url('/users/:id', { id: 1 });
|
|
338
|
-
* // => "/users/1"
|
|
339
|
-
* ```
|
|
340
|
-
*
|
|
341
|
-
* @param {String} path url pattern
|
|
342
|
-
* @param {Object} params url parameters
|
|
343
|
-
* @return {String} url string
|
|
344
|
-
*/
|
|
345
|
-
static url(path, params, ...paramsOrOptions) {
|
|
346
|
-
return Layer.prototype.url.call({ path }, params, ...paramsOrOptions);
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Match given `path` and return corresponding routes.
|
|
350
|
-
*
|
|
351
|
-
* @param {String} path path string
|
|
352
|
-
* @param {String} method method name
|
|
353
|
-
* @return {Object.<path, pathAndMethod>} returns layers that matched path and
|
|
354
|
-
* path and method.
|
|
355
|
-
* @private
|
|
356
|
-
*/
|
|
357
|
-
match(path, method) {
|
|
358
|
-
const matched = {
|
|
359
|
-
path: [],
|
|
360
|
-
pathAndMethod: [],
|
|
361
|
-
route: false
|
|
362
|
-
};
|
|
363
|
-
for (const layer of this.stack) {
|
|
364
|
-
debug("test %s %s", layer.path, layer.regexp);
|
|
365
|
-
if (layer.match(path)) {
|
|
366
|
-
matched.path.push(layer);
|
|
367
|
-
if (layer.methods.length === 0 || layer.methods.includes(method)) {
|
|
368
|
-
matched.pathAndMethod.push(layer);
|
|
369
|
-
if (layer.methods.length > 0) matched.route = true;
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
return matched;
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Run middleware for named route parameters. Useful for auto-loading or
|
|
377
|
-
* validation.
|
|
378
|
-
*
|
|
379
|
-
* @example
|
|
380
|
-
*
|
|
381
|
-
* ```javascript
|
|
382
|
-
* router
|
|
383
|
-
* .param('user', (id, ctx, next) => {
|
|
384
|
-
* ctx.user = users[id];
|
|
385
|
-
* if (!ctx.user) return ctx.status = 404;
|
|
386
|
-
* return next();
|
|
387
|
-
* })
|
|
388
|
-
* .get('/users/:user', ctx => {
|
|
389
|
-
* ctx.body = ctx.user;
|
|
390
|
-
* })
|
|
391
|
-
* .get('/users/:user/friends', ctx => {
|
|
392
|
-
* return ctx.user.getFriends().then(function(friends) {
|
|
393
|
-
* ctx.body = friends;
|
|
394
|
-
* });
|
|
395
|
-
* })
|
|
396
|
-
* // /users/3 => {"id": 3, "name": "Alex"}
|
|
397
|
-
* // /users/3/friends => [{"id": 4, "name": "TJ"}]
|
|
398
|
-
* ```
|
|
399
|
-
*
|
|
400
|
-
* @param {String} param param
|
|
401
|
-
* @param {Function} middleware route middleware
|
|
402
|
-
* @return {Router} instance
|
|
403
|
-
*/
|
|
404
|
-
param(param, middleware) {
|
|
405
|
-
this.params[param] = middleware;
|
|
406
|
-
for (const route of this.stack) route.param(param, middleware);
|
|
407
|
-
return this;
|
|
408
|
-
}
|
|
409
|
-
_formatRouteParams(nameOrPath, pathOrMiddleware, middlewares) {
|
|
410
|
-
const options = {};
|
|
411
|
-
let path;
|
|
412
|
-
if (typeof nameOrPath === "string" && nameOrPath.startsWith("/")) {
|
|
413
|
-
path = nameOrPath;
|
|
414
|
-
middlewares = [pathOrMiddleware, ...middlewares];
|
|
415
|
-
if (typeof pathOrMiddleware === "string") options.name = pathOrMiddleware;
|
|
416
|
-
} else if (nameOrPath instanceof RegExp) {
|
|
417
|
-
path = nameOrPath;
|
|
418
|
-
middlewares = [pathOrMiddleware, ...middlewares];
|
|
419
|
-
if (typeof pathOrMiddleware === "string") options.name = pathOrMiddleware;
|
|
420
|
-
} else if (Array.isArray(nameOrPath)) {
|
|
421
|
-
path = nameOrPath;
|
|
422
|
-
middlewares = [pathOrMiddleware, ...middlewares];
|
|
423
|
-
if (typeof pathOrMiddleware === "string") options.name = pathOrMiddleware;
|
|
424
|
-
} else if (typeof pathOrMiddleware === "string" || pathOrMiddleware instanceof RegExp) {
|
|
425
|
-
path = pathOrMiddleware;
|
|
426
|
-
assert(typeof nameOrPath === "string", "route name should be string");
|
|
427
|
-
options.name = nameOrPath;
|
|
428
|
-
} else if (Array.isArray(pathOrMiddleware)) {
|
|
429
|
-
path = pathOrMiddleware;
|
|
430
|
-
assert(typeof nameOrPath === "string", "route name should be string");
|
|
431
|
-
options.name = nameOrPath;
|
|
432
|
-
} else {
|
|
433
|
-
path = nameOrPath;
|
|
434
|
-
middlewares = [pathOrMiddleware, ...middlewares];
|
|
435
|
-
}
|
|
436
|
-
return {
|
|
437
|
-
path,
|
|
438
|
-
middlewares,
|
|
439
|
-
options
|
|
440
|
-
};
|
|
441
|
-
}
|
|
442
|
-
/**
|
|
443
|
-
* Create `router.verb()` methods, where *verb* is one of the HTTP verbs such
|
|
444
|
-
* as `router.get()` or `router.post()`.
|
|
445
|
-
*
|
|
446
|
-
* Match URL patterns to callback functions or controller actions using `router.verb()`,
|
|
447
|
-
* where **verb** is one of the HTTP verbs such as `router.get()` or `router.post()`.
|
|
448
|
-
*
|
|
449
|
-
* Additionally, `router.all()` can be used to match against all methods.
|
|
450
|
-
*
|
|
451
|
-
* ```javascript
|
|
452
|
-
* router
|
|
453
|
-
* .get('/', (ctx, next) => {
|
|
454
|
-
* ctx.body = 'Hello World!';
|
|
455
|
-
* })
|
|
456
|
-
* .post('/users', (ctx, next) => {
|
|
457
|
-
* // ...
|
|
458
|
-
* })
|
|
459
|
-
* .put('/users/:id', (ctx, next) => {
|
|
460
|
-
* // ...
|
|
461
|
-
* })
|
|
462
|
-
* .del('/users/:id', (ctx, next) => {
|
|
463
|
-
* // ...
|
|
464
|
-
* })
|
|
465
|
-
* .all('/users/:id', (ctx, next) => {
|
|
466
|
-
* // ...
|
|
467
|
-
* });
|
|
468
|
-
* ```
|
|
469
|
-
*
|
|
470
|
-
* When a route is matched, its path is available at `ctx._matchedRoute` and if named,
|
|
471
|
-
* the name is available at `ctx._matchedRouteName`
|
|
472
|
-
*
|
|
473
|
-
* Route paths will be translated to regular expressions using
|
|
474
|
-
* [path-to-regexp](https://github.com/pillarjs/path-to-regexp).
|
|
475
|
-
*
|
|
476
|
-
* Query strings will not be considered when matching requests.
|
|
477
|
-
*
|
|
478
|
-
* #### Named routes
|
|
479
|
-
*
|
|
480
|
-
* Routes can optionally have names. This allows generation of URLs and easy
|
|
481
|
-
* renaming of URLs during development.
|
|
482
|
-
*
|
|
483
|
-
* ```javascript
|
|
484
|
-
* router.get('user', '/users/:id', (ctx, next) => {
|
|
485
|
-
* // ...
|
|
486
|
-
* });
|
|
487
|
-
*
|
|
488
|
-
* router.url('user', 3);
|
|
489
|
-
* // => "/users/3"
|
|
490
|
-
* ```
|
|
491
|
-
*
|
|
492
|
-
* #### Multiple middleware
|
|
493
|
-
*
|
|
494
|
-
* Multiple middleware may be given:
|
|
495
|
-
*
|
|
496
|
-
* ```javascript
|
|
497
|
-
* router.get(
|
|
498
|
-
* '/users/:id',
|
|
499
|
-
* (ctx, next) => {
|
|
500
|
-
* return User.findOne(ctx.params.id).then(function(user) {
|
|
501
|
-
* ctx.user = user;
|
|
502
|
-
* next();
|
|
503
|
-
* });
|
|
504
|
-
* },
|
|
505
|
-
* ctx => {
|
|
506
|
-
* console.log(ctx.user);
|
|
507
|
-
* // => { id: 17, name: "Alex" }
|
|
508
|
-
* }
|
|
509
|
-
* );
|
|
510
|
-
* ```
|
|
511
|
-
*
|
|
512
|
-
* ### Nested routers
|
|
513
|
-
*
|
|
514
|
-
* Nesting routers is supported:
|
|
515
|
-
*
|
|
516
|
-
* ```javascript
|
|
517
|
-
* var forums = new Router();
|
|
518
|
-
* var posts = new Router();
|
|
519
|
-
*
|
|
520
|
-
* posts.get('/', (ctx, next) => {...});
|
|
521
|
-
* posts.get('/:pid', (ctx, next) => {...});
|
|
522
|
-
* forums.use('/forums/:fid/posts', posts.routes(), posts.allowedMethods());
|
|
523
|
-
*
|
|
524
|
-
* // responds to "/forums/123/posts" and "/forums/123/posts/123"
|
|
525
|
-
* app.use(forums.routes());
|
|
526
|
-
* ```
|
|
527
|
-
*
|
|
528
|
-
* #### Router prefixes
|
|
529
|
-
*
|
|
530
|
-
* Route paths can be prefixed at the router level:
|
|
531
|
-
*
|
|
532
|
-
* ```javascript
|
|
533
|
-
* var router = new Router({
|
|
534
|
-
* prefix: '/users'
|
|
535
|
-
* });
|
|
536
|
-
*
|
|
537
|
-
* router.get('/', ...); // responds to "/users"
|
|
538
|
-
* router.get('/:id', ...); // responds to "/users/:id"
|
|
539
|
-
* ```
|
|
540
|
-
*
|
|
541
|
-
* #### URL parameters
|
|
542
|
-
*
|
|
543
|
-
* Named route parameters are captured and added to `ctx.params`.
|
|
544
|
-
*
|
|
545
|
-
* ```javascript
|
|
546
|
-
* router.get('/:category/:title', (ctx, next) => {
|
|
547
|
-
* console.log(ctx.params);
|
|
548
|
-
* // => { category: 'programming', title: 'how-to-node' }
|
|
549
|
-
* });
|
|
550
|
-
* ```
|
|
551
|
-
*
|
|
552
|
-
* The [path-to-regexp](https://github.com/pillarjs/path-to-regexp) module is
|
|
553
|
-
* used to convert paths to regular expressions.
|
|
554
|
-
*
|
|
555
|
-
*/
|
|
556
|
-
verb(method, nameOrPath, pathOrMiddleware, ...middleware) {
|
|
557
|
-
const { options, path, middlewares } = this._formatRouteParams(nameOrPath, pathOrMiddleware, middleware);
|
|
558
|
-
if (typeof method === "string") method = [method];
|
|
559
|
-
this.register(path, method, middlewares, options);
|
|
560
|
-
return this;
|
|
561
|
-
}
|
|
562
|
-
all(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
563
|
-
return this.verb(methods, nameOrPath, pathOrMiddleware, ...middlewares);
|
|
564
|
-
}
|
|
565
|
-
acl(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
566
|
-
return this.verb("acl", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
567
|
-
}
|
|
568
|
-
bind(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
569
|
-
return this.verb("bind", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
570
|
-
}
|
|
571
|
-
checkout(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
572
|
-
return this.verb("checkout", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
573
|
-
}
|
|
574
|
-
connect(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
575
|
-
return this.verb("connect", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
576
|
-
}
|
|
577
|
-
copy(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
578
|
-
return this.verb("copy", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
579
|
-
}
|
|
580
|
-
delete(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
581
|
-
return this.verb("delete", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
582
|
-
}
|
|
583
|
-
del(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
584
|
-
return this.verb("delete", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
585
|
-
}
|
|
586
|
-
get(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
587
|
-
return this.verb("get", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
588
|
-
}
|
|
589
|
-
query(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
590
|
-
return this.verb("query", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
591
|
-
}
|
|
592
|
-
head(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
593
|
-
return this.verb("head", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
594
|
-
}
|
|
595
|
-
link(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
596
|
-
return this.verb("link", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
597
|
-
}
|
|
598
|
-
lock(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
599
|
-
return this.verb("lock", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
600
|
-
}
|
|
601
|
-
["m-search"](nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
602
|
-
return this.verb("m-search", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
603
|
-
}
|
|
604
|
-
merge(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
605
|
-
return this.verb("merge", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
606
|
-
}
|
|
607
|
-
mkactivity(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
608
|
-
return this.verb("mkactivity", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
609
|
-
}
|
|
610
|
-
mkcalendar(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
611
|
-
return this.verb("mkcalendar", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
612
|
-
}
|
|
613
|
-
mkcol(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
614
|
-
return this.verb("mkcol", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
615
|
-
}
|
|
616
|
-
move(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
617
|
-
return this.verb("move", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
618
|
-
}
|
|
619
|
-
notify(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
620
|
-
return this.verb("notify", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
621
|
-
}
|
|
622
|
-
options(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
623
|
-
return this.verb("options", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
624
|
-
}
|
|
625
|
-
patch(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
626
|
-
return this.verb("patch", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
627
|
-
}
|
|
628
|
-
post(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
629
|
-
return this.verb("post", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
630
|
-
}
|
|
631
|
-
propfind(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
632
|
-
return this.verb("propfind", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
633
|
-
}
|
|
634
|
-
proppatch(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
635
|
-
return this.verb("proppatch", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
636
|
-
}
|
|
637
|
-
purge(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
638
|
-
return this.verb("purge", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
639
|
-
}
|
|
640
|
-
put(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
641
|
-
return this.verb("put", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
642
|
-
}
|
|
643
|
-
rebind(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
644
|
-
return this.verb("rebind", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
645
|
-
}
|
|
646
|
-
report(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
647
|
-
return this.verb("report", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
648
|
-
}
|
|
649
|
-
search(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
650
|
-
return this.verb("search", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
651
|
-
}
|
|
652
|
-
source(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
653
|
-
return this.verb("source", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
654
|
-
}
|
|
655
|
-
subscribe(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
656
|
-
return this.verb("subscribe", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
657
|
-
}
|
|
658
|
-
trace(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
659
|
-
return this.verb("trace", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
660
|
-
}
|
|
661
|
-
unbind(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
662
|
-
return this.verb("unbind", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
663
|
-
}
|
|
664
|
-
unlink(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
665
|
-
return this.verb("unlink", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
666
|
-
}
|
|
667
|
-
unlock(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
668
|
-
return this.verb("unlock", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
669
|
-
}
|
|
670
|
-
unsubscribe(nameOrPath, pathOrMiddleware, ...middlewares) {
|
|
671
|
-
return this.verb("unsubscribe", nameOrPath, pathOrMiddleware, ...middlewares);
|
|
672
|
-
}
|
|
673
|
-
};
|
|
674
|
-
|
|
675
|
-
//#endregion
|
|
676
|
-
export { Router };
|
package/dist/types-CxAOQAAb.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { };
|
package/dist/types-DvonNcgV.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
//#region src/types.d.ts
|
|
2
|
-
type Next = () => Promise<void>;
|
|
3
|
-
type MiddlewareFunc = (ctx: any, next: Next) => Promise<void> | void;
|
|
4
|
-
type MiddlewareFuncWithParamProperty = MiddlewareFunc & {
|
|
5
|
-
param?: string;
|
|
6
|
-
};
|
|
7
|
-
type ParamMiddlewareFunc = (param: string, ctx: any, next: Next) => Promise<void> | void;
|
|
8
|
-
type MiddlewareFuncWithRouter<T> = MiddlewareFunc & {
|
|
9
|
-
router: T;
|
|
10
|
-
};
|
|
11
|
-
interface ResourcesController {
|
|
12
|
-
index?: MiddlewareFunc;
|
|
13
|
-
new?: MiddlewareFunc;
|
|
14
|
-
create?: MiddlewareFunc;
|
|
15
|
-
show?: MiddlewareFunc;
|
|
16
|
-
edit?: MiddlewareFunc;
|
|
17
|
-
update?: MiddlewareFunc;
|
|
18
|
-
destroy?: MiddlewareFunc;
|
|
19
|
-
}
|
|
20
|
-
//#endregion
|
|
21
|
-
export { MiddlewareFunc, MiddlewareFuncWithParamProperty, MiddlewareFuncWithRouter, Next, ParamMiddlewareFunc, ResourcesController };
|