帆从另一个控制器调用一个控制器

我有两个控制器, SocketControllerProjectController
SocketController有方法getData(data)
ProjectController有方法addProject(data)
我需要从getData()方法调用addProject()。
我尝试使用sails.controllers.ProjectController.addProject(data)但我有以下错误:

找不到未定义的方法addProject

我寻找替代方法来调用堆栈溢出 services另一个控制器,但这对我没有任何帮助。 有没有其他的方式来得到这个工作?

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

编辑:我会补充说,使用服务是一个更好的地方来保持常见的function,如你的例子。 服务允许将复杂的逻辑与控制器层分离,并轻松地被应用程序的其他区域重新使用。 通常应该保留控制器来处理来自客户端的HTTP请求,并将数据传递给服务层或模型层来操作数据库。 我相信Sails在默认情况下也使服务成为全球性的,所以你不必担心混淆requirepath。

控制器函数也可以通过全局的sails对象访问,而不需要使用,但是ProjectController中的一个函数可以在下面find:

sails.controllers.project.addProject

代替

sails.controllers.ProjectController.addProject

无论如何,你可能想要考虑在服务或模型中共享function,正如之前指出的那样。