私は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)
私はまだ二私のプロジェクトのためのオプションが、ドンを使用したいですどのように知っているのですか
でのmymodule、aとbのに合格しなければならなかった:
は、だから私はそれを動作させるために、これを書かなければなりませんでしたあなたが 'mymodule'宣言をしているあなたのファイル。 –答えがうまくいかなかった場合、私はすでにそれを行い、私はメイン(最後のコード)で私の機能を呼び出すことができます。しかし、 "functionReceived(socket.var1、socket.var2);"はまだ動作しません。 – Kruwe
'var mymodule = require( './ mymodule')のように、' var mymodule'宣言に 'callback'を追加できますか? ); 'それが動作するかどうか確認してください。 –