2012-06-23 25 views
1

我發現CoffeeScript的對象語法:exports.index VS出口= {}

exports.index = (req, res) -> 
    res.render "index", 
    title: "Hello" 

編譯成

exports.index = function(req, res) { 
    return res.render("index", { title: "Hello" }) 
} 

東西與ExpressJS工作。但是,我認爲我可以使用:

exports = 
    index: (req, res) -> 
     res.render "index", 
      title: "Hello" 

讓我不會有鍵入exports.xxx爲所有路由,而是編譯爲

var exports; 
exports = { 
    index: function(req, res) { 
    return res.render("index", { 
     title: "Hello" 
    }); 
    } 
}; 

不出現與ExpressJS,爲什麼工作?

Error: In /labs/Projects/jiewmeng/routes/index.coffee, Parse error on line 1: Unexpected '{' 
    at Object.parseError (/usr/lib/node_modules/coffee-script/lib/coffee-script/parser.js:477:11) 
    at Object.parse (/usr/lib/node_modules/coffee-script/lib/coffee-script/parser.js:554:22) 
    at /usr/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:43:20 
    at Object..coffee (/usr/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:19:17) 
    at Module.load (module.js:353:31) 
    at Function._load (module.js:311:12) 
    at Module.require (module.js:359:17) 
    at require (module.js:375:17) 
    at Object.<anonymous> (/labs/Projects/jiewmeng/server.coffee:6:12) 
    at Object.<anonymous> (/labs/Projects/jiewmeng/server.coffee:74:4) 
+0

可能重複(http://stackoverflow.com/questions/9627044/understanding-exports-in-nodejs) –

回答

3

請參閱this answer explaining module.exports vs exports = foo vs exports.foo = bar

總之,如果您分配一個名爲exports到一個全新的對象的本地變量,你不能分配屬性「真正的」 exports對象,因此您的代碼不按預期工作。您可以A)將對象分配給module.exports或B)將屬性分配給現有的exports對象。在CoffeeScript中很好地工作

一種模式是這樣的:

module.exports = { 
    SomeClass 
    someFunction 
    someObject 
} 
[在理解的NodeJS出口]的
+0

那麼我可以說我的方法覆蓋了所有現有的出口?那麼如果我使用module.exports,它會「擴展」現有的導出變量? –

+0

不,如果您執行'exports.property = foo',您可以「擴展」出口對象。執行'exports = bar'是一個錯誤/錯誤,並且不會對您的模塊導出的屬性產生任何影響。做'module.exports = foo'可以讓你導出一個全新的對象,而不是空的對象node.js爲你提供的。 –