国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發(fā) > 正文

express框架layer.js源碼解析

2024-04-27 15:09:10
字體:
來源:轉載
供稿:網友

layer.js是exPRess框架的路由機制的底層數據結構。下面為主要源碼,已經刪除一些不太重要的代碼。

function Layer(path, options, fn) { if (!(this instanceof Layer)) { return new Layer(path, options, fn); } debug('new %s', path); var opts = options || {}; this.handle = fn; this.name = fn.name || '<anonymous>'; this.params = undefined; this.path = undefined; this.regexp = pathRegexp(path, this.keys = [], opts); if (path === '/' && opts.end === false) {//use的時候end為false,route是true,也就是說use增加的函數,在所有的請求都和會被執(zhí)行 this.regexp.fast_slash = true; }}Layer.prototype.handle_error = function handle_error(error, req, res, next) { var fn = this.handle; if (fn.length !== 4) { // not a standard error handler return next(error);//跳過所有不是4個參數的函數,直接執(zhí)行有四個參數的函數 } try { fn(error, req, res, next); } catch (err) { next(err); }};Layer.prototype.handle_request = function handle(req, res, next) { var fn = this.handle;//handle可能是用戶傳進來的函數或者是route的dispatch if (fn.length > 3) { // not a standard request handler return next();//不標準的函數,直接跳過,把執(zhí)行權交給棧里的下一個函數 } try { fn(req, res, next); } catch (err) {//出錯的話把執(zhí)行權交給棧里的下一個函數,并且把錯誤的對象傳過去 next(err); }};

核心的方法為上面的三個,其中還有一個match方法是用于判斷路徑是否匹配和提取url里的參數的。 1.首先我們看一下構造函數Layer,該函數返回一個對象,并在其中存儲路由路徑和對于的回調函數,該數據結構在express做路由選擇時使用。 2。前綴為handle的兩個函數根據前面的layer層的執(zhí)行結果來判斷執(zhí)行哪個函數,并且根據node的約定,進行相關的參數個數檢測,最后執(zhí)行相關的fn回調,正常情況下是在fn函數的函數體代碼中執(zhí)行next來調到下一層,如果在fn回調執(zhí)行的過程中出現錯誤,則執(zhí)行catch中的代碼next(err),從而執(zhí)行下一個layer,并且把err參數傳到下一層。 路由架構圖


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 铁力市| 曲水县| 安康市| 青川县| 荃湾区| 平江县| 海丰县| 大埔县| 绍兴县| 普洱| 海口市| 巩留县| 合肥市| 修文县| 兴隆县| 于田县| 西乌| 广河县| 松潘县| 陆丰市| 且末县| 修武县| 大田县| 安多县| 天水市| 荆州市| 宁晋县| 将乐县| 铜陵市| 吉林市| 鹤壁市| 竹溪县| 宁津县| 收藏| 准格尔旗| 印江| 高安市| 安国市| 兰坪| 湄潭县| 隆昌县|