2013-09-21 58 views
1

我想在我的节点js文件中使用jquery。我已经安装了jquery模块。如何在节点js中使用jquery?

当我访问的页面,我得到的错误:

var jqxhr = jquery.$.getJSON("favs.json", function() { 
         ^
TypeError: Cannot call method 'getJSON' of undefined 
    at Server.<anonymous> 
    at Server.EventEmitter.emit (events.js:98:17) 
    at HTTPParser.parser.onIncoming (http.js:2076:12) 
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:120:23) 
    at Socket.socket.ondata (http.js:1966:22) 
    at TCP.onread (net.js:525:27) 

代码:

var http = require('http'); 
var jquery = require('jquery'); 

var PORT = 3000; 

http.createServer(function(request, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain', 'Access-Control-Allow-Origin': "*"}); 

    var jqxhr = jquery.$.getJSON("favs.json", function() { 
     console.log("success"); 
    }) 
    .done(function() { 
     console.log("second success"); 
    }) 
    .fail(function() { 
     console.log("error"); 
    }) 
    .always(function() { 
     console.log("complete"); 
    }); 
}).listen(PORT); 

console.log('Server running at http://127.0.0.1:' + PORT + '/'); 

有谁知道如何解决这一问题?

谢谢。

回答

4

更新:对于近期版本(> = 2.1.0),实例化不同的做法,现在还需要jsdom

var env = require('jsdom').env; 
var html = '<html>...</html>'; 

env(html, function(err, window) { 
    console.log(err); 

    var $ = require('jquery')(window); 
}); 

你是不是正确的实例jQuery对象。这是应该怎么做:

var jquery = require('jquery'); 
var $ = jquery.create(); 

然后你可以用你想给你的方法:

$.getJSON('/resource.json', function() { 
    console.log('success'); 
}) 
    .done(function() { 
    console.log('second success'); 
    }) 
    .fail(function() { 
    console.log('error'); 
    }) 
    .always(function() { 
    console.log('complete'); 
    }); 
+2

这是行不通的。 'TypeError:jquery.create不是函数' – corysimmons

+0

最初的答案发布于2013年,不适用于最新版本。我已经添加了一个更新的例子。 – hexacyanide

+0

很感谢。我已经开始请求/ cheerio为我的目的,但感谢您的快速反应/修复。 :) – corysimmons