Node.js 和 JQuery:“ReferenceError:$ 未定义”错误。如何在服务器上将 jquery 与节点一起使用?
Posted
技术标签:
【中文标题】Node.js 和 JQuery:“ReferenceError:$ 未定义”错误。如何在服务器上将 jquery 与节点一起使用?【英文标题】:Node.js & JQuery: "ReferenceError: $ is not defined" error. How do I use jquery with node on the server? 【发布时间】:2016-07-30 07:05:33 【问题描述】:帮助!我正在尝试在我的 node.js 应用程序中使用 jquery,但是当我尝试使用“$”时,我不断收到错误,说“$ 未定义”......但我在顶部定义了它!这是我所做的:
我从 npm 安装了这两个包,如下所示:
npm install jquery
npm install jsdom
然后我在我的 node.js 应用程序中需要它们:
require("jsdom").env("", function(err, window)
if (err)
console.error(err);
return;
var $ = require("jquery")(window);
);
doSomething();
然后我尝试像这样使用它:
function doSomething()
var deferred = $.Deferred();
我收到以下错误:
var deferred = $.Deferred();
^
ReferenceError: $ is not defined
你认为function
是在var $ =
部分之前执行吗?
谢谢!
版本:
节点:4.2.6 快递:4.12.4 jQuery:2.2.3 JSDom:8.3.0更新:解决方案
这是我最终使用的,基于每个人的回答!
var $;
require("jsdom").env("", function(err, window)
if (err)
console.error(err);
return;
$ = require("jquery")(window);
doSomething();
);
【问题讨论】:
【参考方案1】:如果在 jsdom.env 函数的边界之外,您的 doSomething 函数就会被声明。 $ 只能在该回调中访问。像这样的东西应该可以工作:
var $;
require("jsdom").env("", function(err, window)
if (err)
console.error(err);
return;
$ = require("jquery")(window);
doSomething();
);
function doSomething()
var deferred = $.Deferred();
虽然我认为在回调中声明 doSomething 会更惯用。这样它就可以从外部范围访问 jquery。
require("jsdom").env("", function(err, window)
if (err)
console.error(err);
return;
function doSomething()
var deferred = $.Deferred();
var $ = require("jquery")(window);
doSomething();
);
【讨论】:
真可惜,我以为我可以把它放在上面而忘记它!这很好用,谢谢:)【参考方案2】://make sure $ is available in the global scope
var $;
function doSomething()
var deferred = $.Deferred();
require("jsdom").env("", function(err, window)
if (err)
console.error(err);
return;
// assign it
$ = require("jquery")(window);
// you have to call it in here because you are in a callback
doSomething();
);
【讨论】:
【参考方案3】:如果您不需要可用的完整 DOM,而只想解析和抓取/操作 html 元素,那么 cheerio
比 jsdom
更轻量级,并且仍然为您提供类似 jQuery 的 API。
【讨论】:
【参考方案4】:您需要做的就是在 $
初始化之后立即将调用 doSomething()
移动到回调函数中。
// define global variable for further usage
var $;
require("jsdom").env("", function(err, window)
if (err)
console.error(err);
return;
// initialize global variable
$ = require("jquery")(window);
// will work properly here
doSomething();
);
function doSomething()
// using already initialized global variable
var deferred = $.Deferred();
在您的示例中,您需要注意两件事:
1.异步函数
我们需要保证doSomething
只有在$
初始化之后才会被调用。
2。变量范围
您声明doSomething
函数的位置是真的很有意义,而在您的示例中doSomething
根本不知道$
存在。所以我们需要在某个地方(例如全局)定义它来创建一个带有$
变量的closure。
【讨论】:
以上是关于Node.js 和 JQuery:“ReferenceError:$ 未定义”错误。如何在服务器上将 jquery 与节点一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
node.js 和 jquery web 的 UI [关闭]
使用 node.js 和 express 的 JQuery Ajax 发布请求
以 node.js 作为后端的 HTML 中的 jQuery