我有两个控制器,SocketController
和ProjectController
SocketController
有方法getData(数据)
ProjectController
有方法addProject(data)
我需要从getData()方法调用addProject()
我尝试使用sails.controllers.ProjectController.addProject(data)
,但我收到了以下错误:
无法找到未定义的方法addProject
我在Stack Overflow中搜索了使用services
调用另一个控制器的其他方法,但这对我毫无帮助。有没有其他办法让这项工作?
答案 0 :(得分:14)
控制器只是导出公共方法的Node模块。你可以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(...);
}
};
编辑:我将补充说,使用服务是保存常见功能的更好地方,例如您的示例。服务允许复杂的逻辑与控制器层分离,并轻松地由应用程序的其他区域重用。通常应保留控制器以处理来自客户端的HTTP请求,并将数据传递到服务或模型层以操作数据库。我相信Sails默认使服务全局化,因此您不必担心混淆require
路径。
答案 1 :(得分:4)
也可以通过全局sails对象访问控制器函数,而无需使用require,但ProjectController中的函数将在以下位置找到:
sails.controllers.project.addProject
而不是
sails.controllers.ProjectController.addProject
无论如何,您可能需要考虑在服务或模型中共享功能,如前所述。