DNode クライアントとして機能する PHP スクリプトがあります。次に、PHPクライアントから受け取ったコードを評価し、DOMをHTMLとして返すNode.js Dnodeサーバーがあります。ただし、Node.js は私には奇妙に動作します (Node.js の初心者である)。返される文字列は空ではありませんが、何も返されません。私のコードは以下の通りです:
DNode-PHP ライブラリを使用した PHP クライアント コード:
<?php
require(__DIR__.'/../../vendor/autoload.php');
$loop = new React\EventLoop\StreamSelectLoop();
$dnode = new DNode\DNode($loop);
$dnode->connect(7070, function($remote, $connection) {
$js = 'var a = document.createElement("A");';
$js.= 'document.getElementsByTagName("body")[0].appendChild(a);'
$remote->zing($js, function($n) use ($connection) {
print_r($n);
$connection->end();
});
});
$loop->run();
?>
Node.js サーバー コード:
var dnode = require('dnode');
var jsdom = require("jsdom");
var server = dnode({
zing: function (n, cb) {
var document = jsdom.jsdom('<!DOCTYPE html>');
var window = jsdom.parentWindow;
eval(n);
var html = jsdom.serializeDocument(document);
// console.log(html);
cb(html);
}
});
server.listen(7070);
<!DOCTYPE html><html><head></head><body><a></a></body></html>
Console.log()は、期待される結果を明確に出力します。しかし、PHP クライアントには到達しません。しかし奇妙なことに、行cb(html);
をに変更するとcb('test');
、PHP は "test" を出力します。したがって、問題は Node.js 側のどこかにあるはずです。しかし、私はどこを探すべきかわかりません。
ヒントをお寄せいただきありがとうございます。