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

Accessing a Sails controller from a spawned process

我正在尝试在 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);
});

当我升起 Sails 时,出现以下错误:Cannot read property 'MyController' of undefined

我试过在我的控制器名称前没有 require('sails')sails.controllers,但它抛出了我 MyController is not defined.

知道为什么我无法从 bootstrap 函数访问我的控制器吗?

您需要加载或提升 Sails 应用程序才能访问控制器、模型等。有关详细信息,请参阅 sails.load() and 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);
   }
});

旁注,运行 请求上下文之外的控制器代码也很奇怪。您可能应该将该代码重构为 service。正如@elssar 上面指出的那样,控制器标识被小写并且 "controller" 部分被删除。