對象Routing
訊息處理器路由對象
路由物件是http訊息處理的核心對象,伺服器根據路由的設定,匹配url和method,並將http訊息轉發到相應的處理器,以完成不同的事務。
一個簡單的路由,可以直接以JSON 物件的形式提供,例如:
1
2
3
4
5
6
7
8var http = require('http');
var svr = new http.Server(8080, {
'/': r => r.response.write('home'),
'/help': r => r.response.write('help')
});
svr.start();
如果需要更複雜的路由定制,可以自行建立Routing 物件並根據需要處理路由策略:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22var 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();
路由物件根據設定的規則來匹配訊息,將訊息傳遞給符合規則的第一個處理器。後加入的路由規則優先匹配。創建方法:
1
2
3
4var routing = new mq.Routing({
"^/func1(/.*)$": func1,
"^/func2(/.*)$": func2
});
正規表示式符合的項目修改訊息的value 屬性,子項目存入訊息的params 屬性。例如:
1
2
3var routing = new mq.Routing({
"^/func1(/([0-9]+)/([0-9]+)\.html)$": func1,
});
符合訊息"/func1/123/456.html" 後,value == "/123/456.html",params == ["123", "456"];
如果符合的結果沒有子項,則value 為空,params 為空。例如:
1
2
3var routing = new mq.Routing({
"^/func1/[0-9]+/[0-9]+\.html$": func1,
});
符合訊息"/func1/123/456.html" 後,value == "",params == [];
如果符合的結果第一級有多個子項,則value 為空,params 為第一級子項。例如:
1
2
3var routing = new mq.Routing({
"^/func1/([0-9]+)/([0-9]+)\.html$": func1,
});
符合訊息"/func1/123/456.html" 後,value == "",params == ["123", "456"];
如果符合的結果只有一個子項,且無下級子項,則value 和params 均為此子項。例如:
1
2
3var routing = new mq.Routing({
"^/func1/([0-9]+)/[0-9]+\.html$": func1,
});
符合訊息"/func1/123/456.html" 後,value == "123",params == ["123"];
繼承關係
建構函數
Routing
建立一個訊息處理器路由對象
1new Routing(Object map = {});
呼叫參數:
- map: Object, 初始化路由參數
建立一個訊息處理器路由對象
1
2new Routing(String method,
Object map);
呼叫參數:
- method: String, 指定http請求方法,"*" 接受所有方法
- map: Object, 初始化路由參數
成員函數
append
從已有路由物件新增規則,新增後原路由將被清空
1Routing Routing.append(Routing route);
呼叫參數:
- route: Routing, 已經初始化的路由對象
回傳結果:
- Routing, 傳迴路由物件本身
新增一組路由規則
1Routing Routing.append(Object map);
呼叫參數:
- map: Object, 路由參數
回傳結果:
- Routing, 傳迴路由物件本身
新增一條路由規則
1
2Routing Routing.append(String pattern,
Handler hdlr);
呼叫參數:
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
新增一條路由規則
1
2
3Routing Routing.append(String method,
String pattern,
Handler hdlr);
呼叫參數:
- method: String, 指定http請求方法,"*" 接受所有方法,"host" 指定虛擬域名
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
host
新增一組http域名的路由規則
1Routing Routing.host(Object map);
呼叫參數:
- map: Object, 路由參數
回傳結果:
- Routing, 傳迴路由物件本身
增加一條接受http域名的路由規則
1
2Routing Routing.host(String pattern,
Handler hdlr);
呼叫參數:
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
all
新增一組接受所有http方法路由規則
1Routing Routing.all(Object map);
呼叫參數:
- map: Object, 路由參數
回傳結果:
- Routing, 傳迴路由物件本身
新增一條接受所有http方法路由規則
1
2Routing Routing.all(String pattern,
Handler hdlr);
呼叫參數:
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
get
新增一組GET 方法路由規則
1Routing Routing.get(Object map);
呼叫參數:
- map: Object, 路由參數
回傳結果:
- Routing, 傳迴路由物件本身
增加一條接受httpGET 方法路由規則
1
2Routing Routing.get(String pattern,
Handler hdlr);
呼叫參數:
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
post
新增一組接受httpPOST 方法路由規則
1Routing Routing.post(Object map);
呼叫參數:
- map: Object, 路由參數
回傳結果:
- Routing, 傳迴路由物件本身
增加一條接受httpPOST 方法路由規則
1
2Routing Routing.post(String pattern,
Handler hdlr);
呼叫參數:
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
del
新增一組接受httpDELETE 方法路由規則
1Routing Routing.del(Object map);
呼叫參數:
- map: Object, 路由參數
回傳結果:
- Routing, 傳迴路由物件本身
增加一條接受httpDELETE 方法路由規則
1
2Routing Routing.del(String pattern,
Handler hdlr);
呼叫參數:
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
put
新增一組PUT 方法路由規則
1Routing Routing.put(Object map);
呼叫參數:
- map: Object, 路由參數
回傳結果:
- Routing, 傳迴路由物件本身
增加一條接受httpPUT 方法路由規則
1
2Routing Routing.put(String pattern,
Handler hdlr);
呼叫參數:
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
patch
新增一組PATCH 方法路由規則
1Routing Routing.patch(Object map);
呼叫參數:
- map: Object, 路由參數
回傳結果:
- Routing, 傳迴路由物件本身
增加一條接受httpPATCH 方法路由規則
1
2Routing Routing.patch(String pattern,
Handler hdlr);
呼叫參數:
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
find
新增一組FIND 方法路由規則
1Routing Routing.find(Object map);
呼叫參數:
- map: Object, 路由參數
回傳結果:
- Routing, 傳迴路由物件本身
增加一條接受httpFIND 方法路由規則
1
2Routing Routing.find(String pattern,
Handler hdlr);
呼叫參數:
- pattern: String, 訊息匹配格式
- hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler
回傳結果:
- Routing, 傳迴路由物件本身
invoke
處理一個訊息或對象
1Handler Routing.invoke(object v) async;
呼叫參數:
- v:object, 指定處理的訊息或對象
回傳結果:
- Handler, 返回下一步的處理器
toString
傳回物件的字串表示,一般回傳"[Native Object]",物件可以根據自己的特性重新實現
1String Routing.toString();
回傳結果:
- String, 傳回物件的字串表示
toJSON
傳回物件的JSON 格式表示,一般傳回物件定義的可讀屬性集合
1Value Routing.toJSON(String key = "");
呼叫參數:
- key: String, 未使用
回傳結果:
- Value, 傳回包含可JSON 序列化的值