Первое, что я хотел бы сделать, это попытаться упростить и уменьшить связь, ссылаясь на принцип единой ответственности и т. Д. http://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html
Положите эту Schemas в свои собственные файлы, например
models/client.js
models/assistant.js
models/contact.js
Я также обнаружил, что внедренные документы + мангуст обычно ЛАВАШ. Я бы, вероятно, продвинул всех тех, кто был в документах верхнего уровня.
Вам не нужно вставлять ключи своего объекта в кавычки.
routes = {
list: function() {} // no quotes is aok
}
Также «список» в типичных приложениях REST называется «индексом». Так или иначе.
Хорошо, я сломаю это по-другому. Поскольку вам требуется материал из файла index.js в промежуточном программном обеспечении, они становятся тесно связанными, что плохо. На самом деле, я думаю, я бы переписал все это, чтобы было более аккуратно. Сожалею.
Возможно, я заменил бы ваш файл промежуточного программного обеспечения контроллером экспресс-ресурсов https://github.com/visionmedia/express-resource (построенный автором экспресс). Это хорошая основа для спокойных контроллеров, таких как то, что вы строите. Автозагрузчик действительно милый.
Вы также можете посмотреть: http://mcavage.github.com/node-restify/ Это новое, я не пробовал, но я слышал хорошие вещи.
Так, что вы строите в основном автоматизированная система мангуст-падла, с возможностью переопределения, я бы создать контроллер экспресс-ресурсов в качестве базового
/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
, которые могли бы выглядеть Li Ke:
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
быть любой падла вы пытаетесь установить.
Вот несколько ссылок для вас читать:
Кроме того, это звучит, как вы не пишете тесты. Напишите тесты.
Wow. Один адский ответ. Мне придется пройти через эту часть за куском. Спасибо, что нашли время! Мне нравится stackoverflow. –
в контроллере 'NewResourceController' вы должны написать что-то вроде' Base.call (this) 'для применения операций, которые выполняются в Base-Constructor в дочернем классе. (например, создание привилегированных методов) – zaphod1984
Вы правы @ zaphod1984. Ред. – timoxley