[英]Using Jquery in Node Js
我試圖在我的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中有一個帶div1 ID的Div,但是我無法將新的div附加到我的index.html中。 問題是什么? 我的代碼有什么問題嗎?
另外,如果我在代碼頂部定義var $
並移動$('#div1').append('<div>dd</div>');
代碼放在方括號之外,例如
});
$('#div1').append('<div>dd</div>');
var db = require("./db_select");
節點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那樣調用它!
終端實際上把它給了。 當您收到錯誤TypeError: Cannot read property 'createjson' of undefined
該TypeError: Cannot read property 'createjson' of undefined
會告訴您在哪里查看。 在您的代碼中,有一個東西具有creaetejson
的屬性,該屬性在運行時是undefined
。
在最后一個代碼段中,最后一行是runit.load().createjson();
。 這是一行包含東西(對load方法的調用)的東西,該東西具有一個名為createjson
的屬性。 查看該代碼段的其余部分,我們看到load是runit
一種方法,它由其上方的行定義var runit = new runHtml();
。 如果我們檢出runHTML
函數,就會發現它有一個稱為load
的方法。 在此方法中,沒有return語句,因此默認情況下它返回undefined
。
返回行runit.load().createjson();
,我們現在可以看到它是如何評估的: runit
是一個功能樣式類,而load
是runit
上的一個方法,該方法返回未定義。 您在runit
類上調用了load
方法,這意味着該行(除了在load
函數中執行的操作)與undefined.createjson()
相同。
現在,關於解決問題,有許多不同的方法。 最簡單的方法可能是簡單地從load方法返回對象。 如果您走這條路線,建議您加強對關鍵字this的了解 。 您可能還需要研究關鍵字async
和await
。
快樂編碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.