帆从另一个控制器调用一个控制器
我有两个控制器, SocketController
和ProjectController
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在默认情况下也使服务成为全球性的,所以你不必担心混淆require
path。
控制器函数也可以通过全局的sails对象访问,而不需要使用,但是ProjectController中的一个函数可以在下面find:
sails.controllers.project.addProject
代替
sails.controllers.ProjectController.addProject
无论如何,你可能想要考虑在服务或模型中共享function,正如之前指出的那样。