2017-10-18 31 views
0

私はnode.jsのサーバーで作業しています。 私はsocket.ioを使用してクライアントと通信しています 私は自分のサーバーに多くのモジュールを持っています。私はモジュールで宣言された関数を自分のメインに送信しようとします。私はobserverパターンで作業しようとしているので、exports.plugin = pluginを使用したくありません。オブジェクト経由で関数、モジュールをmainに送信するfunction node.js

は、私が試した:

main.jsで

//Modules NPM 
var express = require('express'); 
var observer = require('node-observer'); 

//Extensions JS 
var mymodule = require('./mymodule'); 
var plugin = require('./plugin'); 

//Initialisation 
var app = express(); 
var server = require('http').createServer(app); 
var io = require('socket.io').listen(server); 

...

socket.on('message', function (var1, var2) { //Come from client 

    socket.var1=var1; 
    socket.var2=var2; 
    observer.send(this, "Message", "varSpecification"); 

}); 

plugin.jsで:

//Modules NPM 
var express = require('express'); 
var observer = require('node-observer'); 

//Extensions JS 
var mymodule = require('./mymodule'); 
var main = require("./main"); 

...

戻るメインへ
observer.subscribe(this, "Message", function(who, data) { 

    var functionToSend= new Function ("varA", "varB" ,"mymodule.function(varA, varB); socket.emit('messageOK');"); //I can't create a real function because i don't use socket.io in the module Plugin 

    observer.send(this, "Response", functionToSend); }); 

observer.subscribe(this, "Response", function(who, functionReceived) { 

    functionReceived(socket.var1, socket.var2); //Doesn't work 

}); 

問題は、私はmain.js内の関数を実行すると、それがのmymoduleが見つからないと、関連する機能を実行できないということです。 (ReferenceError:mymoduleが定義されていません)

私はmain.jsで直接関数を実行すると動作します。

observer.subscribe(this, "Response", function(who, functionReceived) { 

    mymodule.function(socket.var1, socket.var2); //Works 

}); 

だから私はそれが私はあなたが私を助けることができる場合、私は感謝以上になります

を送信オブジェクトに問題だと思います!


EDIT:他のテストの後、私は、問題の原因を発見した:

var mymodule = require('./mymodule'); 

...

mymodule.function(a, b); //works 

var functionTest= new Function('mymodule.function(a, b)'); 
functionTest(); //Doesn't work (mymodule is not defined) 

私はまだ二私のプロジェクトのためのオプションが、ドンを使用したいですどのように知っているのですか

+0

でのmymodule、aとbのに合格しなければならなかった:

は、だから私はそれを動作させるために、これを書かなければなりませんでしたあなたが 'mymodule'宣言をしているあなたのファイル。 –

+0

答えがうまくいかなかった場合、私はすでにそれを行い、私はメイン(最後のコード)で私の機能を呼び出すことができます。しかし、 "functionReceived(socket.var1、socket.var2);"はまだ動作しません。 – Kruwe

+0

'var mymodule = require( './ mymodule')のように、' var mymodule'宣言に 'callback'を追加できますか? ); 'それが動作するかどうか確認してください。 –

答えて

0

私は関数コンストラクタを使用しましたが、関数がグローバルで宣言されているかどうかはわかりませんでしたスコープ

var functionTest= new Function('mymodule', 'a', 'b','mymodule.function(a, b)'); 
functionTest(mymodule,a,b); 

私は最後の文のように `module.exportsは= mymodule`を入れて、パラメータ

関連する問題