2014-10-28 2 views
1

Я, имеющий два контроллера, SocketController и ProjectController
SocketController имеет метод GetData (данные)
ProjectController имеет метод addProject (данные)
нужно вызвать addProject() из GetData() метод.
Я попытался с помощью sails.controllers.ProjectController.addProject(data), но я получил следующую ошибку:Паруса называют один контроллер с другого контроллера

Не удается найти метод addProject неопределенной

я искал альтернативные способы вызова другого контроллера с помощью services в Stack Overflow, но это было не помогает мне. Есть ли другой способ получить эту работу?

+0

Не должны ли быть моделями? –

+0

использовать 'sails.controllers.project.addProject (data)', потому что если вы помните, что генерируете api, вы сделали это с помощью 'sails generate api project', а имя ProjectController было назначено парусами в файл вашего контроллера – Paulo

ответ

9

Контроллеры - это только узловые модули, которые экспортируют общедоступные методы. Вы можете require их, как и все остальное. Таким образом, при условии, ваши методы правильно экспонируется с module.exports, это будет работать:

/* ProjectController */ 

module.exports = { 
    addProject: function(data) { 
    // ... 
    } 
}; 

/* SocketController */ 

// Assuming ProjectController.js exists in the same directory (default for Sails) 
var projectController = require('./ProjectController'); 

module.exports = { 
    index: function(req, res) { 
    // ... 
    projectController.addProject(...); 
    } 
}; 

Edit: Я добавлю, что использование услуг является лучшим местом, чтобы сохранить общую функциональность как ваш пример. Службы позволяют с легкостью отделить сложную логику от уровня контроллера и повторно использовать другие области приложения. Контроллеры обычно должны резервироваться для обработки HTTP-запросов от клиента и передачи данных на уровни службы или модели для управления базой данных. Я считаю, что Sails также делает сервисы глобальными по умолчанию, поэтому вам не нужно беспокоиться о запутывании путей require.

+1

Контроллер доступен в глобальном объекте «паруса», поэтому я не понимаю, почему вы не можете просто использовать sails.controllers.project в своем примере вместо выполнения require(). –

4

функции контроллера также доступны через глобальные парусов объекта, без использования требуется, однако функция от ProjectController будет найти по адресу:

sails.controllers.project.addProject

вместо

sails.controllers.ProjectController.addProject

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

Смежные вопросы