【问题标题】:ExpressJS and CoffeeScript class inheritanceExpressJS 和 CoffeeScript 类继承
【发布时间】:2013-03-01 23:36:18
【问题描述】:

使用CoffeeScript 我可以扩展节点的http.Server 类:

{Server} = require 'http'
class MyServer extends Server
  foo: 'bar'
myserver = new MyServer
console.log myserver.foo # 'bar'

class MyServer2 extends MyServer
  constructor: -> super()
myserver2 = new MyServer2
myserver.listen 3000

如果我正确理解了this postexpress 扩展了connect,后者又扩展了http.Server。但是下面有一些继承问题:

Express = require 'express'
class MyApp extends Express
  foo: 'bar'
myapp = new MyApp
console.log myapp.foo # undefined

class MyApp2 extends MyApp
  constructor: -> super()
myapp2 = new MyApp2
console.log myapp2 # {}
myapp2.listen 3000 # throws TypeError

listen 被调用时,它会抛出以下错误,因为myapp2 是一个空对象{} 并且没有listen 方法:

TypeError: Object #<MyApp2> has no method 'listen'

如何以面向对象的方式将expressCoffeeScript 一起使用?

【问题讨论】:

    标签: inheritance express coffeescript


    【解决方案1】:

    你不能从 express 或 server 扩展,因为它是一个函数而不是一个类。您可以使用以下方法进行测试:

    console.log(typeof express);

    【讨论】:

      【解决方案2】:

      是的,你完全可以做到。只需删除那些 ()

      express = require 'express'
      class MyApp extends express
      myapp = new MyApp
      myapp.listen 3000
      

      express 现在代表一个类,所以也许你应该将其命名为Express,以遵守 CoffeeScript 的准则。你看,express() 返回你一个http.Server 后代的实例,而不是一个后代类,所以你试图扩展一个服务器实例。 CoffeeScript 允许直接使用 JS 原型,而这正是你不小心做的。所以,前两行应该是这样的:

      Express = require 'express'
      class MyApp extends Express
      

      【讨论】:

      • 谢谢!但是我发现了更多问题,我已经用他们更新了问题:)
      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多