我有充当 DNode 客户端的 PHP 脚本。然后我有 Node.js Dnode 服务器,它评估从 PHP 客户端接收的代码并将 DOM 作为 HTML 返回。但是,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);
Console.log() 清楚地输出<!DOCTYPE html><html><head></head><body><a></a></body></html>
预期结果。但它永远不会到达 PHP 客户端。但奇怪的是,如果我将行cb(html);
改为cb('test');
,PHP 会输出“test”。所以问题一定出在 Node.js 方面。但我不知道在哪里寻找。
提前感谢您的任何提示。