我有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