我有PHP脚本,充当DNode客户端。然后我有Node.js Dnode服务器,用于评估从PHP客户端接收到的代码,并将其作为HTML返回。然而,Node.js对我来说奇怪(对Node.js新手来说)。即使返回的字符串不为空,它也不会返回任何内容。我的代码如下:使用DNode-PHP library为什么Node.js函数不返回JSDom的serializeDocument结果?
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);
CONSOLE.LOG()清楚地输出<!DOCTYPE html><html><head></head><body><a></a></body></html>
什么是预期的结果。但它永远不会到PHP客户端。但奇怪的是,如果我将cb(html);
行更改为cb('test');
,则PHP会输出“test”。所以这个问题必须在Node.js的某个地方。但我不知道在哪里寻找。
在此先感谢您的任何提示。
谢谢你,你已经钉了它。现在它按预期工作! – Frodik 2014-10-08 05:15:56