2014-03-13 20 views
3

我使用建築師組織我的節點調查項目如何使用cloud9的architect.js創建插件的實例?

https://github.com/c9/architect

在下面的介紹中的滑座66就說明你應該如何創建插件的實例。

http://www.slideshare.net/sergimansilla/architecting-large-nodejs-applications-14912706

下面是摘錄:

function startNewGame(name) { 
    var game = db.createNewGame(name); 

    var config = [ 
     { 
     packagePath: "./game-status", 
     game: game 
     } 
    ]; 

    architect.createApp(/* snip */) 

我不能工作OUT參數,都應該進入createApp什麼。在該文檔中僅提及了已經從磁盤加載像這樣

var architect_config = architect.loadConfig(path.join(__dirname, 'plugins.json')); 

當我嘗試並加載配置直接象在上面的例子中,它會引發錯誤

/code/npm_module_tests/architect_test/node_modules/architect/architect.js:423 
      throw err; 
       ^
Error: Plugin is missing the setup function {"packagePath":"./app"} 

這裏是一個配置我的代碼

var path = require('path'); 
var architect = require('architect'); 

var config = [{ 
    "packagePath": "./app2" 
}] 


var arch = architect.createApp(config, function(){ 
    console.log('application started'); 
}); 

那麼如何使用architect.js創建插件的實例?

編輯:

我已經通過代碼讀取好像需要通過假定的配置是磁盤上的loadConfig方法制備的配置。隨着幻燈片的提示,您怎麼能夠將插件的實例插入到配置中?

+1

錯字parckagePath應packagePath – KeepCalmAndCarryOn

+0

謝謝,但這不是問題。那只是我輸入幻燈片而已。 –

回答

3

使用architect.resolveConfig,loadConfig在內部使用它的情況下配置是一個js文件

function loadConfig(configPath, callback) { 
    var config = require(configPath); 
    var base = dirname(configPath); 

    return resolveConfig(config, base, callback); 
} 

嘗試

var plugins = [{ 
    provides: ["myService"], consumes: [], 
    setup: function(options, imports, register){ 
     console.log(arguments) 
     register(null, { myService: {}}) 
    } 
}, { 
    provides: [], consumes: ["myService"], 
    setup: function(options, imports, register){ 
     console.log(imports.myService) 
    } 
}, { 
    packagePath: "./app" 
    game: game 
}] 

architect.resolveConfig(plugins, __dirname, function(err, config) { 
    var app = architect.createApp(config, function(err, app) { 
     console.log(err, app) 
    }) 
    app.on("service", function (service) { 
     console.log(service) 
    }) 
}) 

或同步版本

var config = architect.resolveConfig(plugins, __dirname) 
var app = architect.createApp(config) 
app.on("service", function (service) { 
    console.log(service) 
}) 
+0

謝謝,但我仍然不知道你應該如何注入插件導入實例(例如imports.myGameInsatnce)。你告訴我的是如何導出一個插件。我可以看到你如何使用register()來導出一個實例,但是如何將該實例傳遞給其他插件?這聽起來像是從幻燈片中看出它是一個內置功能。 –

+1

我已經更新了示例以顯示消耗數組的用法了,那是你在找什麼? –

+0

不是。雖然你確實幫我配置了選項。幻燈片顯示的內容是調用startNewGame,它創建一個遊戲實例,然後將其傳遞給其導入對象內的另一個插件。所以在consumes數組中的模塊實際上是一個不是單例的遊戲實例。可以多次調用createApp嗎?當你有不止一件東西時,會發生什麼?插件系統如何幫助您將實例作爲依賴進行傳遞?我應該問該模塊的例子像imports.gameManager.getGameInstance(id) –