【问题标题】:CoffeeScript Object Syntax: exports.index vs exports = {}CoffeeScript 对象语法:exports.index vs exports = {}
【发布时间】:2012-06-25 07:58:30
【问题描述】:

我发现

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)

【问题讨论】:

标签: coffeescript express


【解决方案1】:

请看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
}

【讨论】:

  • 那么我可以说我的方法覆盖了所有现有的导出吗?那么如果我使用module.exports,它会“扩展”现有的exports变量吗?
  • 不,如果你这样做 exports.property = foo 你“扩展”了导出对象。执行exports = bar 是一个错误/错误,不会对模块导出的属性产生任何影响。执行module.exports = foo 可以让您导出一个全新的对象,而不是 node.js 为您提供的空对象。
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 2011-03-30
  • 2018-05-20
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多