/// /// /** * @description 消息处理器路由对象 * * 路由对象是 http 消息处理的核心对象,服务器根据路由的设定,匹配 url 和 method,并将 http 消息转发到相应的处理器,以完成不同的事务。 * * 一个简单的路由,可以直接以 JSON 对象的形式提供,比如: * ```JavaScript * var http = require('http'); * * var svr = new http.Server(8080, { * '/': r => r.response.write('home'), * '/help': r => r.response.write('help') * }); * * svr.start(); * ``` * 如果需要更复杂的路由定制,可以自行创建 Routing 对象并根据需要处理路由策略: * ```JavaScript * var http = require('http'); * var mq = require('mq'); * * var app = new mq.Routing(); * * app.get('/', r => r.response.write('home')); * app.get('/help', r => r.response.write('help')); * * app.post('/help', r => r.response.write('post a help.')); * * app.get('/home/:user', (r, user) => r.response.write('hello ' + user)); * * app.get('/user/:id(\\d+)', (r, id) => r.response.write('get ' + id)); * * app.get('/actions', { * '/run': r => r.response.write('running'), * '/sleep': r => r.response.write('sleeping'), * '(.*)': r => r.response.write('........') * }); * * var svr = new http.Server(8080, app); * svr.start(); * ``` * 路由对象根据设定的规则匹配消息,将消息传递给符合规则的第一个处理器。后加入的路由规则优先匹配。创建方法: * ```JavaScript * var routing = new mq.Routing({ * "^/func1(/.*)$": func1, * "^/func2(/.*)$": func2 * }); * ``` * 正则表达式匹配的项目修改消息的 value 属性,子项目存入消息的 params 属性。例如: * ```JavaScript * var routing = new mq.Routing({ * "^/func1(/([0-9]+)/([0-9]+)\.html)$": func1, * }); * ``` * 匹配消息 "/func1/123/456.html" 后,value == "/123/456.html",params == ["123", "456"]; * * 如果匹配的结果没有子项,则 value 为空,params 为空。例如: * ```JavaScript * var routing = new mq.Routing({ * "^/func1/[0-9]+/[0-9]+\.html$": func1, * }); * ``` * 匹配消息 "/func1/123/456.html" 后,value == "",params == []; * * 如果匹配的结果第一级有多个子项,则 value 为空,params 为第一级子项。例如: * ```JavaScript * var routing = new mq.Routing({ * "^/func1/([0-9]+)/([0-9]+)\.html$": func1, * }); * ``` * 匹配消息 "/func1/123/456.html" 后,value == "",params == ["123", "456"]; * * 如果匹配的结果只有一个子项,并且无下级子项,则 value 和 params 均为此子项。例如: * ```JavaScript * var routing = new mq.Routing({ * "^/func1/([0-9]+)/[0-9]+\.html$": func1, * }); * ``` * 匹配消息 "/func1/123/456.html" 后,value == "123",params == ["123"]; * */ declare class Class_Routing extends Class_Handler { /** * @description 创建一个消息处理器路由对象 * @param map 初始化路由参数 * */ constructor(map?: FIBJS.GeneralObject); /** * @description 创建一个消息处理器路由对象 * @param method 指定 http 请求方法,"*" 接受所有方法 * @param map 初始化路由参数 * */ constructor(method: string, map: FIBJS.GeneralObject); /** * @description 从已有路由对象中添加规则,添加后原路由将被清空 * @param route 已经初始化的路由对象 * @return 返回路由对象本身 * */ append(route: Class_Routing): Class_Routing; /** * @description 添加一组路由规则 * @param map 路由参数 * @return 返回路由对象本身 * */ append(map: FIBJS.GeneralObject): Class_Routing; /** * @description 添加一条路由规则 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ append(pattern: string, hdlr: Class_Handler): Class_Routing; /** * @description 添加一条路由规则 * @param method 指定 http 请求方法,"*" 接受所有方法,"host" 指定虚拟域名 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ append(method: string, pattern: string, hdlr: Class_Handler): Class_Routing; /** * @description 添加一组 http 域名的路由规则 * @param map 路由参数 * @return 返回路由对象本身 * */ host(map: FIBJS.GeneralObject): Class_Routing; /** * @description 添加一条接受 http 域名的路由规则 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ host(pattern: string, hdlr: Class_Handler): Class_Routing; /** * @description 添加一组接受所有 http 方法路由规则 * @param map 路由参数 * @return 返回路由对象本身 * */ all(map: FIBJS.GeneralObject): Class_Routing; /** * @description 添加一条接受所有 http 方法路由规则 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ all(pattern: string, hdlr: Class_Handler): Class_Routing; /** * @description 添加一组 GET 方法路由规则 * @param map 路由参数 * @return 返回路由对象本身 * */ get(map: FIBJS.GeneralObject): Class_Routing; /** * @description 添加一条接受 http GET 方法路由规则 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ get(pattern: string, hdlr: Class_Handler): Class_Routing; /** * @description 添加一组接受 http POST 方法路由规则 * @param map 路由参数 * @return 返回路由对象本身 * */ post(map: FIBJS.GeneralObject): Class_Routing; /** * @description 添加一条接受 http POST 方法路由规则 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ post(pattern: string, hdlr: Class_Handler): Class_Routing; /** * @description 添加一组接受 http DELETE 方法路由规则 * @param map 路由参数 * @return 返回路由对象本身 * */ del(map: FIBJS.GeneralObject): Class_Routing; /** * @description 添加一条接受 http DELETE 方法路由规则 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ del(pattern: string, hdlr: Class_Handler): Class_Routing; /** * @description 添加一组 PUT 方法路由规则 * @param map 路由参数 * @return 返回路由对象本身 * */ put(map: FIBJS.GeneralObject): Class_Routing; /** * @description 添加一条接受 http PUT 方法路由规则 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ put(pattern: string, hdlr: Class_Handler): Class_Routing; /** * @description 添加一组 PATCH 方法路由规则 * @param map 路由参数 * @return 返回路由对象本身 * */ patch(map: FIBJS.GeneralObject): Class_Routing; /** * @description 添加一条接受 http PATCH 方法路由规则 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ patch(pattern: string, hdlr: Class_Handler): Class_Routing; /** * @description 添加一组 FIND 方法路由规则 * @param map 路由参数 * @return 返回路由对象本身 * */ find(map: FIBJS.GeneralObject): Class_Routing; /** * @description 添加一条接受 http FIND 方法路由规则 * @param pattern 消息匹配格式 * @param hdlr 内置消息处理器,处理函数,链式处理数组,路由对象,详见 mq.Handler * @return 返回路由对象本身 * */ find(pattern: string, hdlr: Class_Handler): Class_Routing; }