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

Abh*_*hek 3 node.js sails.js

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

找不到undefined的方法addProject

servicesStack Overflow中搜索了另一种调用另一个控制器的方法,但这对我没用.有没有其他办法让这项工作?

Ter*_*rry 14

控制器只是导出公共方法的Node模块.你可以require像其他任何东西一样.因此,假设您的方法正确暴露module.exports,这将工作:

/* ProjectController */

module.exports = {
  addProject: function(data) {
    // ...
  }
};
Run Code Online (Sandbox Code Playgroud)
/* SocketController */

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

module.exports = {
  index: function(req, res) {
    // ...
    projectController.addProject(...);
  }
};
Run Code Online (Sandbox Code Playgroud)

编辑:我将补充说,使用服务是一个更好的地方,以保持常见的功能,如您的示例.服务允许复杂的逻辑与控制器层分离,并轻松地由应用程序的其他区域重用.通常应保留控制器以处理来自客户端的HTTP请求,并将数据传递到服务或模型层以操作数据库.我相信Sails默认使服务全局化,因此您不必担心require路径混乱.

  • sails.controllers消失了(sails 1.x)...现在仅需求方法起作用。 (2认同)

小智 5

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

sails.controllers.project.addProject

代替

sails.controllers.ProjectController.addProject

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