node.js методы экспорта шаблона проектирования фасада

Я пытаюсь следовать шаблону проектирования фасада в приложении node.js, где у меня есть объект, который используется с остальной частью приложения, называемого controller.js, в качестве фасада. Контроллер управляет вызовами объектов user.js, animal.js и house.js, которые являются отдельными файлами.

В controller.js я делаю

var housecontroller = require("./controllers/housecontroller");
...

Я хочу вызвать что-то вроде controller.getHouse() в другом файле (клиенте). Как мне сделать так, чтобы я мог это сделать и не звонить housecontroller.getHouse()?

Каждый из моих контроллеров отформатирован следующим образом

module.exports = {
    getHouse:function(){...},
    ...
}

Я немного смущен тем, как правильно экспортировать вещи, чтобы заставить это работать. Я импортирую/экспортирую контроллеры и их методы в controller.js следующим образом

module.exports = {
    getHouse : housecontroller.getHouse,
    ...
};    

В примерах я использую только дом, но подразумевается, что я делаю то же самое для пользователя и животного, у каждого из которых есть несколько методов. В клиенте я просто импортирую controller.js и использую его методы.

var controller = require("./controller");
controller.getHouse();

person cavs    schedule 15.12.2015    source источник


Ответы (1)


В соответствии с вашим кодом/именованием у вас может быть файл controller.js в папке контроллеров с чем-то вроде этого

var housecontroller = require('./housecontroller');
var carcontroller = require('./carcontroller');

module.exports = {
  getHouse: housecontroller.controller,
  getCar: carcontroller.controller
};

Код клиента может быть:

var controller = require('./controllers/controller');
controller.getHouse();

Я добавил carcontroller в качестве примера расширения.

Если у вас есть только одна функция для каждого контроллера, вы можете изменить свой код и эти примеры на:

//housecontroller.js
module.exports = getHouse;

//controller.js
var housecontroller = require('./housecontroller');
var carcontroller = require('./carcontroller');

module.exports = {
  getHouse: housecontroller,
  getCar: carcontroller
};

Хотя я не рекомендую это, потому что вы уменьшаете возможность предлагать больше функций из этого модуля в будущем.

person eduardods    schedule 16.12.2015
comment
Спасибо за ответ. Я попробовал то, что вы предложили, но я думаю, что теперь у меня проблемы с тем, как параметры передаются в тех методах, которые экспортируются в controller.js - person cavs; 16.12.2015
comment
Имейте в виду, что каждый метод назначает/передает функцию, которую вы изначально разработали в housecontroller, поэтому именно в этой функции вам нужно изменить подпись, чтобы добавить параметры и поиграть с ними. Это то, что ты имеешь в виду? - person eduardods; 16.12.2015