0
我試圖在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
。
任何想法爲什麼我不能從引導功能訪問我的控制器?
你說得對。經過一番研究後,我意識到我錯誤地解釋了'spawn'意味着什麼。它創建了一個完全獨立的過程,因此無法訪問Sails主進程中的任何控制器,模型或任何東西。我很高興能夠在Sails中創建一個子進程,並像'spawn'一樣異步地監視它的輸出。 我想我會堅持一個經典的服務,但考慮到我的應用程序的性質,它有點沒有適應。 – Bertrand
您可以使用'.fork()'產生一個子進程,該子進程具有用於從父進程發送/接收消息的通信通道。但是我懷疑你會以這種方式實現你正在尋找的東西。工作人員通常用於長時間運行的進程,否則會阻止Node線程處理事件(如請求);如果你從子進程中調用父代碼,那麼你仍然會阻塞父線程。如果您只需要父級的某些狀態信息,則可以將其作爲命令行參數傳遞給worker。 – sgress454