Javascript 为什么Node.js函数没有';是否返回JSDom序列化文档结果?

Javascript 为什么Node.js函数没有';是否返回JSDom序列化文档结果?,javascript,php,node.js,dnode,Javascript,Php,Node.js,Dnode,我有一个PHP脚本,它充当DNode客户端。然后是Node.js Dnode服务器,它评估从PHP客户端接收的代码,并将DOM作为HTML返回。然而,Node.js的行为对我来说很奇怪(就像一个Node.js新手)。它不返回任何内容,即使返回的字符串不是空的。我的代码如下: PHP客户端代码使用: Node.js服务器代码: var dnode = require('dnode'); var jsdom = require("jsdom"); var server = dnode({ z

我有一个PHP脚本,它充当DNode客户端。然后是Node.js Dnode服务器,它评估从PHP客户端接收的代码,并将DOM作为HTML返回。然而,Node.js的行为对我来说很奇怪(就像一个Node.js新手)。它不返回任何内容,即使返回的字符串不是空的。我的代码如下:

PHP客户端代码使用:


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);
var dnode=require('dnode');
var jsdom=require(“jsdom”);
var服务器=dnode({
zing:函数(n,cb){
var document=jsdom.jsdom(“”);
var window=jsdom.parentWindow;
eval(n);
var html=jsdom.serializeDocument(文档);
//log(html);
cb(html);
}
});
服务器监听(7070);
Console.log()清楚地输出预期结果。但它永远不会到达PHP客户端。但奇怪的是,如果我改变行
cb(html)
cb('test'),PHP输出“测试”。因此,问题一定出在Node.js端的某个地方。但我不知道去哪里找


提前感谢您的提示。

您如何查看回复?通过网络浏览器?如果是这样的话,那么您将根据在
eval(n)
中计算的内容来更改文档的DOM。。。如果没有任何变化,那么您将不会看到任何东西,因为除了
html/head/body
标记之外,您将有一个空DOM。值得花时间确认您得到的是一个空的响应,而不仅仅是一个空的DOM

这就是说,
eval
函数具有您想要在上面声明的
文档/窗口
上执行它的任何上下文。实际上,它只是在
节点本身的上下文中执行,而不是在您试图创建的页面上执行。要解决此问题,请尝试使用:

window.eval(n)

如果看一下创建类似浏览器的窗口对象的示例

在jsdom的Github页面上,这将使您更好地了解如何准确使用此包

上面的内容应该是这样的:

var document = jsdom.jsdom("<!DOCUMENT html>");
var window = document.parentWindow;

window.eval(n);

var html = jsdom.serializeDocument(document);

cb(html);
var document=jsdom.jsdom(“”);
var window=document.parentWindow;
评估(n);
var html=jsdom.serializeDocument(文档);
cb(html);

现在,您将在之前创建的DOM上执行Javascript:-)

您的问题不在节点中。当我使用您在问题中显示的服务器代码并尝试使用此客户端代码时,我得到了预期的结果:

var dnode = require("dnode");

var d = dnode();
d.on('remote', function (remote) {
    var js = 'var a = document.createElement("A");' +
             'document.getElementsByTagName("body")[0].appendChild(a);';
    remote.zing(js, function (s) {
        console.log(s);
    });
});
d.connect('localhost', '7070');
我不做PHP,所以我不知道这方面可能有什么问题

var dnode = require("dnode");

var d = dnode();
d.on('remote', function (remote) {
    var js = 'var a = document.createElement("A");' +
             'document.getElementsByTagName("body")[0].appendChild(a);';
    remote.zing(js, function (s) {
        console.log(s);
    });
});
d.connect('localhost', '7070');