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"];

繼承關係

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<class>Handler|new Handler()|invoke()] [<this>Routing|new Routing()|append();host();all();get();post();del();put();patch();find()] [object] <:- [Handler] [Handler] <:- [Routing] Handler new Handler() invoke() Routing new Routing() append() host() all() get() post() del() put() patch() find() object toString() toJSON()

構造函數

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, 返迴路由對象本身

添加一條接受 http GET 方法路由規則

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

調用參數:

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

返回結果:

  • Routing, 返迴路由對象本身

post

添加一組接受 http POST 方法路由規則

1
Routing Routing.post(Object map);

調用參數:

  • map: Object, 路由參數

返回結果:

  • Routing, 返迴路由對象本身

添加一條接受 http POST 方法路由規則

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

調用參數:

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

返回結果:

  • Routing, 返迴路由對象本身

del

添加一組接受 http DELETE 方法路由規則

1
Routing Routing.del(Object map);

調用參數:

  • map: Object, 路由參數

返回結果:

  • Routing, 返迴路由對象本身

添加一條接受 http DELETE 方法路由規則

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, 返迴路由對象本身

添加一條接受 http PUT 方法路由規則

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, 返迴路由對象本身

添加一條接受 http PATCH 方法路由規則

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, 返迴路由對象本身

添加一條接受 http FIND 方法路由規則

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 序列化的值