ExpressJS和CoffeeScript类继承

时间:2013-03-13 20:06:43

标签: inheritance express coffeescript

使用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 post,则express会延伸connect,而{{3}}会延伸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'

如何使用express以面向对象的方式使用CoffeeScript

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你不能从快递或服务器扩展,因为它不是一个类的功能。您可以使用以下方法对此进行测试:

console.log(typeof express);