2014-10-28 72 views
1

调用一个控制器有方法的getData(数据)
ProjectController具有方法addProject(数据)
我需要调用从的getData addProject()()方法。
我尝试使用sails.controllers.ProjectController.addProject(data)但我得到了以下错误:帆从我有两个控制器,<code>SocketController</code>和<code>ProjectController</code><br> <code>SocketController</code>另一个控制器

无法找到我搜索的替代方法调用使用services另一个控制器Stack Overflow但是这无助于我不确定

方法addProject。有没有其他的方式来完成这项工作?

+0

不应该是模型吗? – 2014-10-28 15:17:08

+0

使用'sails.controllers.project.addProject(data)',因为如果你记得生成api,你用'sails generate api project'做了它,并且名称ProjectController被sails分配给你的控制器文件 – Paulo 2017-08-02 00:42:31

回答

9

控制器只是导出公共方法的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

控制器可用在全局“sails”对象中,所以我不明白为什么你不能在你的示例中使用sails.controllers.project,而不是执行require()。 – 2015-09-04 19:37:25

4

控制器功能也通过全球帆对象访问,而无需使用的需要,但是从ProjectController一个功能中找到:

sails.controllers.project.addProject

,而不是

sails.controllers.ProjectController.addProject

无论如何,您可能想要考虑在服务或模型中共享功能,如前所述。

相关问题