2012-06-23 5 views
1

Я считаю, чтоCoffeeScript объекта Синтаксис: exports.index против экспорта = {}

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

возможно дубликат [Понимание экспорта в NodeJS] (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 
} 
+0

Могу ли я сказать, что мой метод переопределяет весь существующий экспорт? Тогда, если я буду использовать module.exports, он «расширит» существующую переменную экспорта? –

+0

Нет, если вы выполняете 'export.property = foo', вы« расширяете »объект экспорта. Выполнение 'export = bar' является ошибкой/ошибкой и не будет влиять на свойства, экспортируемые вашим модулем. Выполнение 'module.exports = foo' позволяет вам экспортировать совершенно новый объект, в отличие от пустого объекта node.js для вас. –

Смежные вопросы