我正在使用以下模式构建我的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
作为回调?这听起来像是个坏主意。
答案 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)