2012-04-13 20 views
7

मैं काम करने के लिए jsdom :)Node.js jsdom त्रुटि

यहाँ पाने के लिए कोशिश कर रहा हूँ कोड है:

var jsdom = require("jsdom"); 
var request = require("request"); 
var fs  = require('fs'); 
var jquery = fs.readFileSync("./jquery-1.7.2.js", 'utf-8'); 

request({ uri:'http://nodejs.org/dist/' }, function (error, response, body) { 
    if (error && response.statusCode !== 200) { 
     console.log('HTTP request error... '+error); 
    } 
    jsdom.env({ 
     html: body, 
     scripts: [ 
      jquery 
     ], 
     done: function(errors, window) { 
      console.log('done'); 
     } 
    }); 
}); 

और यहाँ त्रुटि है:

jsdom.js:171 
    features = JSON.parse(JSON.stringify(window.document.implementation._fea 
                 ^
TypeError: Cannot read property 'implementation' of undefined 

मैं अगर जाँच कर ली है पृष्ठ लाया जाता है और यदि jquery lib को पार्स किया जाता है - वे हैं।

हम jsdom.js के कार्यान्वयन पर दे सकता है:

[snip] 
exports.env = exports.jsdom.env = function() { 
    [snip] 
    window  = exports.html(html, null, options).createWindow(), 
    features = JSON.parse(JSON.stringify(window.document.implementation._features)), 
    docsLoaded = 0, 
    [snip] 

ऐसा लगता है कि .createWindow() सफल नहीं होता है ...

और मैं यह Cloud9 पर चल रहा हूँ।

किसी भी मदद का स्वागत है।

+0

नोड और jsdom का संस्करण क्या है? यह यहां नोड v0.6.16 और jsdom 0.2.14 के साथ काम करता है। (वैसे, आप 'toStread() 'कॉल के बजाय' fs.readFileSync (पथ, 'utf8') कर सकते हैं (जिस पर आपको शायद 'utf8''' पास करना चाहिए)। –

+0

नोड का संस्करण 0.6.8 है और jsdom का संस्करण 0.2.14 है। – kal3v

+0

यदि कोड सर्वर पक्ष से है तो मुझे लगता है कि "विंडो" केवल ब्राउज़र पक्ष से है – ZiTAL

उत्तर

0

मुझे प्रश्न का उत्तर मिला।

इसका एक टुकड़ा http://support.cloud9ide.com/entries/21243717-accessing-your-private-running-project-via-javascript-or-curl पर पाया जा सकता है।

तो, क्लाउड 9 पर जेएसओएम काम करने के लिए, किसी को पुराने संस्करण (जैसे 0.2.1) का उपयोग करने की आवश्यकता है और स्क्रिप्ट को नोड के पुराने संस्करण (जैसे 0.4, जो क्लाउड 9 पर समर्थित है) के साथ चलाने की आवश्यकता है।

7

जैसा कि https://github.com/tmpvar/jsdom/issues/436 पर बताया गया है, यह संदर्भित नहीं होने के संदर्भ में हो सकता है। सिद्धांत में jsdom में एक शिम है जो इसे संदर्भित किए बिना काम करने की अनुमति देता है, यही कारण है कि इसे आवश्यक मॉड्यूल के बजाय वैकल्पिक के रूप में सूचीबद्ध किया गया है, लेकिन यह शिम टूटा हुआ प्रतीत होता है (https://github.com/tmpvar/jsdom/issues/456 देखें)।

तो अभी के रूप में आपको नवीनतम jsdom का उपयोग करने के लिए संदर्भ स्थापित करने की आवश्यकता है। आपके ओएस और पर्यावरण के आधार पर कई कारण हैं जो एक समस्या हो सकती हैं। एनपीएम को संदर्भित करें और फिर उस समस्या को ट्रैक करें।

आपकी मूल समस्या के आधार पर प्रयास करने की चीज़ें: - सत्यापित करें कि आपके पास पाइथन 2.7 या अधिक और बेहतर 2.7.3 इंस्टॉल है। यह भी सत्यापित करें कि जब आप पाइथन -वर्जन टाइप करते हैं और आपका पाइथनपैथ सही होता है तो उसे चलाया जाता है। - सुडो एनपीएम संदर्भ - एनपीएम कैश साफ़ करें; एनपीएम संदर्भ को स्थापित करें - बल

+0

धन्यवाद मुद्दों पर चर्चा का लिंक। इस समस्या को मारने के बाद मैं पाइथन निर्भरता से बचने के लिए डोमिनोज़/ज़िप्टो नोड पर स्विच करने की सोच रहा हूं। – Jonathan

+0

मुझे एक ही समस्या थी। jsdom को संदर्भित और अपग्रेड करना इंस्टॉल करें: 'sudo npm संदर्भ स्थापित करें; एनपीएम एलएस; एनपीएम jsdom हटा दें; npm [email protected] इंस्टॉल करें; एनपीएम कैश क्लीन ' –

0

jsdom को अपग्रेड करने का प्रयास करें। मुझे jsdom (0.3.x) के पुराने संस्करण के साथ बिल्कुल वही त्रुटि थी। फिर मैंने इसे हटा दिया और वर्तमान ([email protected]) संस्करण स्थापित किया और अब यह काम करता है।