2013-03-13 67 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);