我正在尝试在我的Node Js Code中使用JQuery,但它无法正常工作。 请参阅下面的Node JS代码。
var http = require('http'),
fs = require('fs');
fs.readFile('./index.html', function (err, html) {
if (err) {
throw err;
}
http.createServer(function (request, response) {
response.writeHeader(200, {
"Content-Type": "text/html"
});
response.write(html);
response.end();
}).listen(8080);
});
require("jsdom").env("", function (err, window) {
if (err) {
console.error(err);
return;
}
var $ = require("jquery")(window);
$('#div1').append('<div>dd</div>');
});
我的索引文件正常运行。在我的Index.html中有一个div有div1 Id,但是我无法在我的index.html中添加新的div。 问题是什么?我的代码有什么问题吗?
此外,如果我在代码顶部定义var $
并将$('#div1').append('<div>dd</div>');
代码移出括号,例如
});
$('#div1').append('<div>dd</div>');
var db = require("./db_select");
Node JS抛出错误,例如:TypeError: $ is not a function
如何定义全局$?
我已经更改了我的代码,因为我预计它可能是同步问题。
var runHtml = function () {
this.load = function () {
var http = require('http'),
fs = require('fs');
fs.readFile('./index.html', function (err, html) {
if (err) {
throw err;
}
console.log('Node Js is working');
http.createServer(function (request, response) {
response.writeHeader(200, {
"Content-Type": "text/html"
});
response.write(html);
response.end();
}).listen(8080);
});
};
this.createjson = function () {
require("jsdom").env("", function (err, window) {
if (err) {
console.error(err);
return;
}
var $ = require("jquery")(window);
$('#div1').append('<div>dd</div>');
});
};
if (this instanceof runHtml) {
return this.runHtml;
} else {
return new runHtml();
}
};
var runit = new runHtml();
runit.load().createjson();
但是,当我运行此代码时,我从终端收到错误,例如:TypeError: Cannot read property 'createjson' of undefined
为什么我收到此错误?
正如你所看到的,我有一个createjson函数,我试图在加载函数之后调用它来使用javascript chaning!
答案 0 :(得分:0)
终端实际上放弃了它。当您收到错误false
时会告诉您要查找的位置。在您的代码中,有一个具有TypeError: Cannot read property 'createjson' of undefined
属性的东西,它在运行时是creaetejson
。
在您的上一个代码段中,最后,您有一行undefined
。这是一个有一个东西(对load方法的调用)的行,它有一个名为runit.load().createjson();
的属性。查看代码段的其余部分,我们看到加载是createjson
的方法,由runit
上方的行定义。var runit = new runHtml();
。如果我们签出runHTML
函数,我们会发现它有一个名为load
的方法。在此方法中,没有return语句,因此默认情况下返回undefined
。
返回第runit.load().createjson();
行,我们现在可以看到它的评估方式:runit
是一个功能样式类,load
是runit
上的一个方法,它返回未定义。您在load
类上调用了runit
方法,这意味着该行(除了它在load
函数中执行的操作)与undefined.createjson()
相同。
现在,关于解决问题,有许多不同的方法。
最简单的方法可能是简单地从load方法返回对象。如果你走那条路,我建议你beef up your knowledge of the keyword this。您可能还想查看关键字async
和await
。
快乐编码