UNPKG

@eggjs/router

Version:

Router middleware for egg/koa. Provides RESTful resource routing.

105 lines (104 loc) 5.75 kB
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 {};