在Node Js中使用Jquery

时间:2016-10-20 01:21:43

标签: javascript jquery node.js global

我正在尝试在我的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!

1 个答案:

答案 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是一个功能样式类,loadrunit上的一个方法,它返回未定义。您在load类上调用了runit方法,这意味着该行(除了它在load函数中执行的操作)与undefined.createjson()相同。

现在,关于解决问题,有许多不同的方法。 最简单的方法可能是简单地从load方法返回对象。如果你走那条路,我建议你beef up your knowledge of the keyword this。您可能还想查看关键字asyncawait

快乐编码