Первое, что я хотел бы сделать, это попытаться упростить ситуацию и уменьшить связь, используя принцип единственной ответственности, и др.
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 в промежуточном программном обеспечении, они становятся тесно связанными, что плохо. на самом деле, я думаю, что я бы переписал все это, чтобы было аккуратнее. К сожалению.
Я бы, вероятно, заменил ваш файл промежуточного программного обеспечения на контроллер экспресс-ресурсов
https://github.com/visionmedia/express-resource (построено автором экспресса). Это хорошая основа для спокойных контроллеров, таких как то, что вы строите. Автопогрузчик очень милый.
Вы также можете посмотреть: http://mcavage.github.com/node-restify/ Это новое, я не пробовал, но слышал хорошие вещи.
Поскольку то, что вы создаете, - это, по сути, автоматизированная система mongoose-crud с необязательным переопределением, я бы создал контроллер экспресс-ресурсов в качестве вашей базы
/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
на то, что вы пытаетесь настроить.
Вот несколько ссылок для чтения:
Кроме того, похоже, что вы не пишете тесты. Пишите тесты.