我正在使用此插件管理器https://github.com/c9/architect并创建节点模块。我遇到的问题是我想从我的节点模块向主机应用程序公开api。问题是插件管理器使用回调来表示所有插件都已注册。
实施例: 在我的主应用程序中,我需要我正在创建的api模块
var api = require('apiModule')
在我的node_modules目录中
module.exports = (function apiModule(){
architect.createApp(config, function(err, app){
if(err) throw err;
return app
});
})();
这显然不起作用,但表明我正在尝试将app
的值返回给主应用程序。
如何将app
的值恢复为api
变量?
答案 0 :(得分:0)
你没有传递回调,而是创建一个回调。 你的功能也不应该自己执行。
您的代码应为:
var architect = require('architect');
module.exports = function apiModule(config, callback){
architect.createApp(config, callback);
});
//otherModule
var apiModule = require('apiModule');
var config = require('config');
apiModule(config, function(err, app){
if(err) throw err;
// do something with app
});
如果你正在寻找一个比你习惯的更惯用的api。 我建议你试试bluebird
var architect = require('architect');
var Promise = require('bluebird');
var createApp = Promise.promisify(architect.createApp);
module.exports = function apiModule(config) {
return createApp(config);
}
// Then in your other module
var apiModule = require('apiModule');
apiModule()
.then(function(result) {})
.catch(function(error) {})
我希望清除它:)
答案 1 :(得分:0)
您可以将回调传递给您的模块:
module.exports = function(callback){
architect.createApp(config, function(err, app){
if(err) throw err;
return callback(app); //you should check if callback is a function to prevent error
});
});
var api = require('apiModule');
api(function(app) {
console.log(app); //you access your app
})