2013-03-13 66 views
1

随着CoffeeScript我可以延长节点的http.Server类:ExpressJS和CoffeeScript的类继承

{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

回答

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 
+0

谢谢!但是我发现了更多的问题,我已经更新了他们的问题:) – 2013-03-15 18:27:55

0

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

console.log(typeof express);