Object 內建對象

對象Routing

訊息處理器路由對象

路由物件是http訊息處理的核心對象,伺服器根據路由的設定,匹配url和method,並將http訊息轉發到相應的處理器,以完成不同的事務。

一個簡單的路由,可以直接以JSON 物件的形式提供,例如:

1 2 3 4 5 6 7 8
var 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 22
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();

路由物件根據設定的規則來匹配訊息,將訊息傳遞給符合規則的第一個處理器。後加入的路由規則優先匹配。創建方法:

1 2 3 4
var routing = new mq.Routing({ "^/func1(/.*)$": func1, "^/func2(/.*)$": func2 });

正規表示式符合的項目修改訊息的value 屬性,子項目存入訊息的params 屬性。例如:

1 2 3
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 為空。例如:

1 2 3
var routing = new mq.Routing({ "^/func1/[0-9]+/[0-9]+\.html$": func1, });

符合訊息"/func1/123/456.html" 後,value == "",params == [];

如果符合的結果第一級有多個子項,則value 為空,params 為第一級子項。例如:

1 2 3
var routing = new mq.Routing({ "^/func1/([0-9]+)/([0-9]+)\.html$": func1, });

符合訊息"/func1/123/456.html" 後,value == "",params == ["123", "456"];

如果符合的結果只有一個子項,且無下級子項,則value 和params 均為此子項。例如:

1 2 3
var routing = new mq.Routing({ "^/func1/([0-9]+)/[0-9]+\.html$": func1, });

符合訊息"/func1/123/456.html" 後,value == "123",params == ["123"];

繼承關係

建構函數

Routing

建立一個訊息​​處理器路由對象

1
new Routing(Object map = {});

呼叫參數:

  • map: Object, 初始化路由參數

建立一個訊息​​處理器路由對象

1 2
new Routing(String method, Object map);

呼叫參數:

  • method: String, 指定http請求方法,"*" 接受所有方法
  • map: Object, 初始化路由參數

成員函數

append

從已有路由物件新增規則,新增後原路由將被清空

1
Routing Routing.append(Routing route);

呼叫參數:

  • route: Routing, 已經初始化的路由對象

回傳結果:

  • Routing, 傳迴路由物件本身

新增一組路由規則

1
Routing Routing.append(Object map);

呼叫參數:

  • map: Object, 路由參數

回傳結果:

  • Routing, 傳迴路由物件本身

新增一條路由規則

1 2
Routing Routing.append(String pattern, Handler hdlr);

呼叫參數:

  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

新增一條路由規則

1 2 3
Routing Routing.append(String method, String pattern, Handler hdlr);

呼叫參數:

  • method: String, 指定http請求方法,"*" 接受所有方法,"host" 指定虛擬域名
  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

host

新增一組http域名的路由規則

1
Routing Routing.host(Object map);

呼叫參數:

  • map: Object, 路由參數

回傳結果:

  • Routing, 傳迴路由物件本身

增加一條接受http域名的路由規則

1 2
Routing Routing.host(String pattern, Handler hdlr);

呼叫參數:

  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

all

新增一組接受所有http方法路由規則

1
Routing Routing.all(Object map);

呼叫參數:

  • map: Object, 路由參數

回傳結果:

  • Routing, 傳迴路由物件本身

新增一條接受所有http方法路由規則

1 2
Routing Routing.all(String pattern, Handler hdlr);

呼叫參數:

  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

get

新增一組GET 方法路由規則

1
Routing Routing.get(Object map);

呼叫參數:

  • map: Object, 路由參數

回傳結果:

  • Routing, 傳迴路由物件本身

增加一條接受httpGET 方法路由規則

1 2
Routing Routing.get(String pattern, Handler hdlr);

呼叫參數:

  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

post

新增一組接受httpPOST 方法路由規則

1
Routing Routing.post(Object map);

呼叫參數:

  • map: Object, 路由參數

回傳結果:

  • Routing, 傳迴路由物件本身

增加一條接受httpPOST 方法路由規則

1 2
Routing Routing.post(String pattern, Handler hdlr);

呼叫參數:

  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

del

新增一組接受httpDELETE 方法路由規則

1
Routing Routing.del(Object map);

呼叫參數:

  • map: Object, 路由參數

回傳結果:

  • Routing, 傳迴路由物件本身

增加一條接受httpDELETE 方法路由規則

1 2
Routing Routing.del(String pattern, Handler hdlr);

呼叫參數:

  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

put

新增一組PUT 方法路由規則

1
Routing Routing.put(Object map);

呼叫參數:

  • map: Object, 路由參數

回傳結果:

  • Routing, 傳迴路由物件本身

增加一條接受httpPUT 方法路由規則

1 2
Routing Routing.put(String pattern, Handler hdlr);

呼叫參數:

  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

patch

新增一組PATCH 方法路由規則

1
Routing Routing.patch(Object map);

呼叫參數:

  • map: Object, 路由參數

回傳結果:

  • Routing, 傳迴路由物件本身

增加一條接受httpPATCH 方法路由規則

1 2
Routing Routing.patch(String pattern, Handler hdlr);

呼叫參數:

  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

find

新增一組FIND 方法路由規則

1
Routing Routing.find(Object map);

呼叫參數:

  • map: Object, 路由參數

回傳結果:

  • Routing, 傳迴路由物件本身

增加一條接受httpFIND 方法路由規則

1 2
Routing Routing.find(String pattern, Handler hdlr);

呼叫參數:

  • pattern: String, 訊息匹配格式
  • hdlr:Handler, 內建訊息處理器,處理函數,鍊式處理數組,路由對象,詳見mq.Handler

回傳結果:

  • Routing, 傳迴路由物件本身

invoke

處理一個訊息或對象

1
Handler Routing.invoke(object v) async;

呼叫參數:

  • v:object, 指定處理的訊息或對象

回傳結果:

  • Handler, 返回下一步的處理器

toString

傳回物件的字串表示,一般回傳"[Native Object]",物件可以根據自己的特性重新實現

1
String Routing.toString();

回傳結果:

  • String, 傳回物件的字串表示

toJSON

傳回物件的JSON 格式表示,一般傳回物件定義的可讀屬性集合

1
Value Routing.toJSON(String key = "");

呼叫參數:

  • key: String, 未使用

回傳結果:

  • Value, 傳回包含可JSON 序列化的值