Node.js 帆从另一个控制器调用一个控制器
我有两个控制器,Node.js 帆从另一个控制器调用一个控制器,node.js,sails.js,Node.js,Sails.js,我有两个控制器,SocketController和ProjectController SocketController具有方法getData(data) ProjectController有方法addProject(数据) 我需要从getData()方法调用addProject() 我尝试使用sails.controllers.ProjectController.addProject(data),但出现以下错误: 找不到未定义的addProject方法 我在中搜索了使用服务呼叫另一个控制器的替代
SocketController
和ProjectController
SocketController
具有方法getData(data)ProjectController
有方法addProject(数据)我需要从getData()方法调用addProject() 我尝试使用
sails.controllers.ProjectController.addProject(data)
,但出现以下错误:
找不到未定义的addProject方法
我在中搜索了使用
服务
呼叫另一个控制器的替代方法,但这对我没有帮助。还有其他方法可以完成这项工作吗?控制器只是导出公共方法的节点模块。你可以像其他任何事情一样要求他们。因此,假设您的方法正确地公开在模块.exports中,这将起作用:
/* ProjectController */
module.exports = {
addProject: function(data) {
// ...
}
};
编辑:我要补充一点,使用服务是保持像您的示例一样的公共功能的更好地方。服务允许将复杂的逻辑与控制器层解耦,并轻松地被应用程序的其他区域重用。控制器通常应保留用于处理来自客户端的HTTP请求,并将数据传递给服务层或模型层以操作数据库。我相信,默认情况下,Sails还使服务成为全局服务,因此您不必担心混淆require
路径。控制器功能也可以通过全局Sails对象访问,而无需使用require,但是ProjectController的功能将在以下位置找到:
sails.controllers.project.addProject
而不是
sails.controllers.ProjectController.addProject
无论如何,您可能需要考虑在服务或模型中共享功能,正如前面所指出的。
不应该是模型吗?使用<代码>帆。您使用的是sails generate api project
,并且名称ProjectController已由sails分配给您的控制器文件控制器在全局“sails”对象中可用,因此我不明白为什么您不能在示例中仅使用sails.controllers.project,而不使用require().sails.controllers(sails 1.x)。。。现在只有require方法有效。
/* SocketController */
// Assuming ProjectController.js exists in the same directory (default for Sails)
var projectController = require('./ProjectController');
module.exports = {
index: function(req, res) {
// ...
projectController.addProject(...);
}
};