如果我想在应用程序启动时实例化Express服务器,然后在另一个类中引用一些实例化服务器的属性,那么这是一个“好”的方法吗?看起来单个服务器实例可以工作,但在JS /节点中感觉不对。
例如:
# app.coffee
server = new Server()
# server.coffee
Http = require 'http'
express = require 'express'
class Server
foos: null
constructor: ->
@app = express()
Http.createServer(@app).listen('1337', 'localhost', cb)
cb: ->
@foos = ['foo', 'bar']
# another_class.coffee
Server = require './server'
class AnotherClass
constructor: ->
# how do I access and do something with the instantiated server object in app.coffee
答案 0 :(得分:1)
为coffeescript定义单例的最佳方法是创建一个可在整个代码中使用的变量。
以下是我编写的示例程序:
class TestHandler
constuctor: (@elementHandler) ->
testList: []
addTest: (test) ->
@testList.push test
getTestList: ->
@testList
getTestForName: (name) ->
for e in @getTestList() when e.getName() is name
return e
updateTestName: (name, newName) ->
@getTestForName(name).name = newName
class Test
constructor: (name) ->
@name = name
getName: ->
@name
testHandler = new TestHandler()
testHandler.addTest new Test 'hi'
如您所见,在class
范围之外的变化底部,我创建了一个带有TestHandler
新实例的变量。然后,我可以在我的任何类中使用testHandler
,它将始终链接到该特定的类。