簡體   English   中英

在Node Js中使用Jquery

[英]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 undefinedTypeError: 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是一個功能樣式類,而loadrunit上的一個方法,該方法返回未定義。 您在runit類上調用了load方法,這意味着該行(除了在load函數中執行的操作)與undefined.createjson()相同。

現在,關於解決問題,有許多不同的方法。 最簡單的方法可能是簡單地從load方法返回對象。 如果您走這條路線,建議您加強對關鍵字this的了解 您可能還需要研究關鍵字asyncawait

快樂編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM