2013-09-21 96 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