2

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

如果我正确理解了这篇文章express请扩展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'

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

4

2 回答 2

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
于 2013-03-14T16:13:11.737 回答
0

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

console.log(typeof express);

于 2017-12-21T15:43:38.847 回答