2014-04-01 120 views
1

我最近在學習express.js。下面的代碼是從express.js的路由器lib複製的。實際返回的是什麼?

var proto = module.exports = function(options) { 
    options = options || {}; 

    function router(req, res, next) { 
    router.handle(req, res, next); 
    } 

    // mixin Router class functions 
    router.__proto__ = proto; 

    router.params = {}; 
    router._params = []; 
    router.caseSensitive = options.caseSensitive; 
    router.strict = options.strict; 
    router.stack = []; 

    return router; 
    }; 

如果我叫

var Router = require('./router'); 
var _router = new Router(...); 

什麼是_router是什麼返回我的問題嗎?它是功能router(req, res, next)?如果是,我可以撥打_router(req, res, next);嗎?

如果我錯了,有人可以請解釋代碼做什麼?

如果是的話,爲什麼他們不只是不喜歡它:

var proto = module.exports = function(options) { 
options = options || {}; 

var router = {}; 

// mixin Router class functions 
router.__proto__ = proto; 

router.params = {}; 
router._params = []; 
router.caseSensitive = options.caseSensitive; 
router.strict = options.strict; 
router.stack = []; 

return router; 
}; 
+0

是的,是的。雖然修改函數的原型有點奇怪... – Bergi

+0

我不明白他們爲什麼會在這裏返回路由器功能。爲什麼要這樣做,就像 – Benson

+0

*爲什麼*,請問快遞的開發商。 – Bergi

回答

0

關於第一個問題:

var Router = require('./router'); 
var _router = new Router(...); 

var Router是由function router(req, res, next)創建一個對象,你var router是一個新的對象Router。在JavaScript中幾乎所有東西都是一個對象。你可以閱讀更多here

如果他們使用你的aproach,他們將不會有一個構造函數。並且他們使用構造函數來做router.handle(req, res, next);我不知道他們爲什麼需要這個句柄,你可以學習更多的代碼或者問開發者。但是如果你知道參數是什麼,你可能可以使用var router new Router(req,res,next);

+0

我不認爲你可以調用'var _router = new Router(req,res,next);'。 'require'返回的'Router'是'function(option){...}'。你只能調用_router(req,res,next);'。 – Benson

+0

你說的對,我誤解了很多「路由器」在同一個函數中,忘記了第一個funciont。對於變量的名稱我相信路由器(req,res,next)用於承諾稍後解決某些問題,因此您可以通過鏈路傳遞路由。 http://know.cujojs.com/tutorials/async/mastering-async-error-handling-with-promises.html.md – Scoup

相關問題