你可以使用带有new的类实例化的module.exports吗?

时间:2014-07-10 19:25:54

标签: node.js express

我正在使用以下模式构建我的express应用。当我匹配一个路由时,我喜欢委托一个对象,该对象是一个特定类的实例,旨在处理这种请求。看起来像这样

server.js:

app.get('/myroute', require('myRoute'));

myRoute.coffee:

iMyRouteHandler = (req, res) ->
  new MyRouteHandler(req, res)

class MyRouteHandler
  constructor: (@req, @res) ->
    # Do some other preparation
    @send_response()

  send_response: =>
    if @req.param('something') is 'interesting'
      @res.send 'Something interesting'
    else
      @res.send 'Something boring'

module.exports = iMyRouteHandler

我很想听到有关我的“设计模式”的任何评论,但我的问题是module.exports。由于我想实例化一个类(即通过new调用该函数),我不能简单地将其名称作为express的回调传递:我必须做这个解决方法。有没有办法跳过这一切?也许我可以通过MyRouteHandler.constructor作为回调?这听起来像是个坏主意。

1 个答案:

答案 0 :(得分:0)

有不同的方法来解决这个问题,但我对这种模式的主要评论是,你真的需要有一个令人信服的理由去使用OOP,因为它是一个完美的功能用例编程。

但是如果你想坚持下去,你可能会做这种变化,这几乎是一样的,但更温和一些(恕我直言):

class MyRouteHandler
  constructor: (@req, @res) ->
    # Do some other preparation
    @send_response()

  send_response: =>
    if @req.param('something') is 'interesting'
      @res.send 'Something interesting'
    else
      @res.send 'Something boring'

module.exports = (req, res) ->
  new MyRouteHandler(req, res)