使用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
?
答案 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);