从生成的进程访问 Sails 控制器

Accessing a Sails controller from a spawned process

本文关键字:访问 Sails 控制器 进程      更新时间:2023-09-26

我正在尝试在Sails的升降机上生成一个后台服务。这是我到目前为止想出的:

config/bootstrap.js

module.exports.bootstrap = function(cb) {
    sails.on('lifted', function() {
        var spawn = require('child_process').spawn;
        var worker = spawn('node', ['./worker.js']);
    });
    cb();
};

worker.js

var sails = require('sails');
sails.controllers.MyController.myFunction(null, function(data) {
    console.log(data);
});

当我举起帆时,我收到以下错误:Cannot read property 'MyController' of undefined

我尝试没有require('sails'),也没有控制器名称前面的sails.controllers,但随后它让我MyController is not defined.

知道为什么我无法从引导功能访问我的控制器吗?

您需要加载或提升 Sails 应用程序才能访问控制器、模型等。 有关更多详细信息,请参阅sails.load()sails.lift()。 所以它会是这样的:

var sails = require('sails');
sails.load(function(err, sails) {
   if (err) {
     // handle error and exit process
   }
   // sails is now fully loaded
   sails.controllers.my.myFunction(null, function(data) {
      console.log(data);
   }
});

旁注,在请求上下文之外运行控制器代码也很奇怪。 您可能应该将该代码重构为服务。 正如上面@elssar说明的那样,控制器身份是小写的,"控制器"部分被删除。