@eggjs/router
Version:
Router middleware for egg/koa. Provides RESTful resource routing.
105 lines (104 loc) • 5.75 kB
TypeScript
import { RegisterOptions, Router, RouterMethod, RouterOptions } from './Router.js';
import { MiddlewareFunc, ResourcesController } from './types.js';
interface Application {
controller: Record<string, any>;
}
/**
* FIXME: move these patch into @eggjs/router
*/
export declare class EggRouter extends Router {
readonly app: Application;
/**
* @class
* @param {Object} opts - Router options.
* @param {Application} app - Application object.
*/
constructor(opts: RouterOptions, app: Application);
verb(method: RouterMethod | RouterMethod[], nameOrPath: string | RegExp | (string | RegExp)[], pathOrMiddleware: string | RegExp | (string | RegExp)[] | MiddlewareFunc, ...middleware: (MiddlewareFunc | string)[]): this;
head(path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
head(name: string, path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
options(path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
options(name: string, path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
get(path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
get(name: string, path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
put(path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
put(name: string, path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
patch(path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
patch(name: string, path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
post(path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
post(name: string, path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
delete(path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
delete(name: string, path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
all(path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
all(name: string, path: string | RegExp | (string | RegExp)[], ...middlewares: (MiddlewareFunc | string)[]): Router;
register(path: string | RegExp | (string | RegExp)[], methods: string[], middleware: MiddlewareFunc | string | (MiddlewareFunc | string | ResourcesController)[], opts?: RegisterOptions): import("./Layer.js").Layer | import("./Layer.js").Layer[];
/**
* restful router api
* @param {String} name - Router name
* @param {String} prefix - url prefix
* @param {Function} middleware - middleware or controller
* @example
* ```js
* app.resources('/posts', 'posts')
* app.resources('posts', '/posts', 'posts')
* app.resources('posts', '/posts', app.role.can('user'), app.controller.posts)
* app.resources('posts', '/posts', middleware1, middleware2, app.controller.posts)
* ```
*
* Examples:
*
* ```js
* app.resources('/posts', 'posts')
* ```
*
* yield router mapping
*
* Method | Path | Route Name | Controller.Action
* -------|-----------------|----------------|-----------------------------
* GET | /posts | posts | app.controller.posts.index
* GET | /posts/new | new_post | app.controller.posts.new
* GET | /posts/:id | post | app.controller.posts.show
* GET | /posts/:id/edit | edit_post | app.controller.posts.edit
* POST | /posts | posts | app.controller.posts.create
* PATCH | /posts/:id | post | app.controller.posts.update
* DELETE | /posts/:id | post | app.controller.posts.destroy
*
* app.router.url can generate url based on arguments
* ```js
* app.router.url('posts')
* => /posts
* app.router.url('post', { id: 1 })
* => /posts/1
* app.router.url('new_post')
* => /posts/new
* app.router.url('edit_post', { id: 1 })
* => /posts/1/edit
* ```
* @return {Router} return route object.
* @since 1.0.0
*/
resources(prefix: string, controller: string | ResourcesController): Router;
resources(prefix: string, middleware: MiddlewareFunc, controller: string | ResourcesController): Router;
resources(name: string, prefix: string, controller: string | ResourcesController): Router;
resources(name: string, prefix: string, middleware: MiddlewareFunc, controller: string | ResourcesController): Router;
resources(nameOrPath: string | RegExp, ...middleware: (MiddlewareFunc | string | ResourcesController)[]): Router;
/**
* @param {String} name - Router name
* @param {Object} params - more parameters
* @example
* ```js
* router.url('edit_post', { id: 1, name: 'foo', page: 2 })
* => /posts/1/edit?name=foo&page=2
* router.url('posts', { name: 'foo&1', page: 2 })
* => /posts?name=foo%261&page=2
* ```
* @return {String} url by path name and query params.
* @since 1.0.0
*/
url(name: string, params?: Record<string, string | number | (string | number)[]>): string;
/**
* @alias to url()
*/
pathFor(name: string, params?: Record<string, string | number | (string | number)[]>): string;
}
export {};