我要做的第一件事是尝试通过调用单一责任原则等来使事情变得更简单并减少耦合。
http://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html
将这些模式放入他们自己的文件中,例如
models/client.js
models/assistant.js
models/contact.js
我还发现嵌入式文档+猫鼬通常是 PITA。我可能会将所有这些提升为顶级文档。
您不需要将对象的键括在引号中。
routes = {
list: function() {} // no quotes is aok
}
典型 REST 应用程序中的“列表”也称为“索引”。反正。
好的,我会以不同的方式分解它。由于您需要中间件中 index.js 文件中的内容,因此它们变得紧密耦合,这很糟糕。事实上,我想我会重写这整件事,让它更整洁。对不起。
我可能会用 express-resource 控制器
https://github.com/visionmedia/express-resource(由 express 的作者构建)替换您的“中间件”文件。这是一个很好的 restful 控制器框架,比如你正在构建的控制器。自动装载机真的很可爱。
您可能还想看看:http ://mcavage.github.com/node-restify/是新的,我没有尝试过,但我听说过好东西。
由于您正在构建的基本上是一个自动化的 mongoose-crud 系统,具有可选的覆盖,我将创建一个 express-resource 控制器作为您的基础
/controllers/base_controller.js
它可能看起来像
var BaseController = function() {} // BaseController constructor
BaseController.prototype.index = function() {
// copy from your middleware
}
BaseController.prototype.show = function() {
// copy from your middleware
}
BaseController.prototype.create = function() {
// copy from your middleware
}
// etc
module.exports = BaseController
然后我会做类似的事情:
/controllers/some_resource_controller.js
这可能看起来像:
var BaseController = require('./base_controller')
var NewResourceController = function() {
// Apply BaseController constructor (i.e. call super())
BaseController.apply(this, arguments)
}
NewResourceController.prototype = new Base()
NewResourceController.prototype.create = function() {
// custom create method goes here
}
module.exports = NewResourceController
然后要使用它,您可以执行以下操作:
var user = app.resource(myResourceName, new ResourceController());
…在某个循环中,该循环设置myResourceName
为您要设置的任何杂物。
这里有一些链接供您阅读:
另外,听起来您不是在编写测试。编写测试。