2012-09-29 15 views
23

मैंने अपने कॉलेज पाठ्यक्रम में नोड.जेएस और जेसन ऑब्जेक्ट्स के साथ काम करना शुरू कर दिया। इस सप्ताह हमारे असाइनमेंट में से एक था कुछ जेसन ऑब्जेक्ट्स बनाना और ऑब्जेक्ट के हिस्सों को एचटीएमएल पेज में निकालना था। मैंने सोचा कि मुझे यह कैसे करना है, इस पर एक अच्छी समझ थी, लेकिन जब मैं नोड शुरू करने की कोशिश करता हूं तो मैं एक त्रुटि में भाग रहा हूं। अगर मैं कॉलेज ऑब्जेक्ट और पार्स स्टेटमेंट को हटा देता हूं तो नोड ठीक चलाता है। यहाँJSON + Node.js - अप्रत्याशित टोकन ओ

undefined:1 
[object Object],[object Object],[object Object],[object Object],[object Object 
^ 
SyntaxError: Unexpected token o 
at Object.parse (native) 
at Object.<anonymous> (/home/ubuntu/node_stuff/node_json/requestHandlers.js:13:20) 
at Module._compile (module.js:449:26) 
at Object.Module._extensions..js (module.js:467:10) 
at Module.load (module.js:356:32) 
at Function.Module._load (module.js:312:12) 
at Module.require (module.js:362:17) 
at require (module.js:378:17) 
at Object.<anonymous> (/home/ubuntu/node_stuff/node_json/index.js:3:23) 
at Module._compile (module.js:449:26) 

और कोड के साथ मैं काम कर रहा हूँ है:

यहाँ त्रुटि मैं जब मैं "नोड index.js" चलाया जाता है।

var querystring = require("querystring"), 
fs = require("fs"), 
formidable = require("formidable"); 

var colleges = [ 
{"name":"A-B Tech","street":"340 Victoria Road","city":"Asheville","state":"NC","zip":"28801","phone":"828-254-1921"}, 
{"name":"UNC Asheville","street":"1 University Heights","city":"Asheville","state":"NC","zip":"28804","phone":"828-251-6600"}, 
{"name":"UNC Charlotte","street":"9201 University City Blvd","city":"Charlotte","state":"NC","zip":"28223","phone":"704-687-8622"}, 
{"name":"Western Carolina","street":"North Carolina 107","city":"Cullowhee","state":"NC","zip":"28723","phone":"877-928-4968"}, 
{"name":"NC State","street":"2200 Hillsborough","city":"Raleigh","state":"NC","zip":"27695","phone":"919-515-2011"} 
]; 

var college = JSON.parse(colleges); 

function abtech(response) { 
console.log("Request handler 'abtech' was called."); 

var body = '<html>'+ 
'<head>'+ 
'<meta http-equiv="Content-Type" '+ 
'content="text/html; charset=UTF-8" />'+ 
'</head>'+ 
'<body>'+ 
'<ul>'+ 
'<li>' + college[0].name + '</li>'+ 
'<li>' + college[0].street + '</li>'+ 
'<li>' + college[0].city + ' ' + college[0].state + ' ' + college[0].zip + '</li>'+ 
'<li>' + college[0].phone + '</li>'+ 
'</ul>'+ 
'</body>'+ 
'</html>'; 

response.writeHead(200, {"Content-Type": "text/html"}); 
response.write(body); 
response.end(); 
} 

function unca(response) { 
console.log("Request handler 'abtech' was called."); 

var body = '<html>'+ 
'<head>'+ 
'<meta http-equiv="Content-Type" '+ 
'content="text/html; charset=UTF-8" />'+ 
'</head>'+ 
'<body>'+ 
'<ul>'+ 
'<li></li>'+ 
'<li></li>'+ 
'<li></li>'+ 
'<li></li>'+ 
'</ul>'+ 
'</body>'+ 
'</html>'; 

response.writeHead(200, {"Content-Type": "text/html"}); 
response.write(body); 
response.end(); 
} 

function home(response) { 
console.log("Request handler 'home' was called."); 

var body = '<html>'+ 
'<head>'+ 
'<meta http-equiv="Content-Type" '+ 
'content="text/html; charset=UTF-8" />'+ 
'</head>'+ 
'<body>'+ 
'<h1>Welcome to College</h2>'+ 
'<p>Where would you like to visit?</p>'+ 
'<ul>'+ 
'<li><a href="/colleges">Colleges</a></li>'+ 
'<li><a href="/hours">Hours of Operation</a></li>'+ 
'<li><a href="/start">Upload a Photo</a></li>'+ 
'<li><a href="/show">View Gallery</a></li>'+ 
'</ul>'+ 
'</body>'+ 
'</html>'; 

response.writeHead(200, {"Content-Type": "text/html"}); 
response.write(body); 
response.end(); 
} 

function colleges(response) { 
console.log("Request handler 'colleges' was called."); 

var body = '<html>'+ 
'<head>'+ 
'<meta http-equiv="Content-Type" '+ 
'content="text/html; charset=UTF-8" />'+ 
'</head>'+ 
'<body>'+ 
'<h1>Colleges</h2>'+ 
'<ul>'+ 
'<li><a href="/abtech">A-B Tech</a></li>'+ 
'<li><a href="/unca">UNC Asheville</a></li>'+ 
'<li><a href="/uncc">UNC Charlotte</a></li>'+ 
'<li><a href="/wcu">Western Carolina</a></li>'+ 
'<li><a href="/ncsu">NC State</a></li>'+ 
'</ul>'+ 
'</body>'+ 
'</html>'; 

response.writeHead(200, {"Content-Type": "text/html"}); 
response.write(body); 
response.end(); 
} 

function hours(response) { 
console.log("Request handler 'gallery' was called."); 

var body = '<html>'+ 
'<head>'+ 
'<meta http-equiv="Content-Type" '+ 
'content="text/html; charset=UTF-8" />'+ 
'</head>'+ 
'<body>'+ 
'<h1>Hours of Operation</h2>'+ 
'<table>'+ 
'<tr><td>Monday - Thursday</td><td>9 a.m. - 7 p.m.</td></tr>'+ 
'<tr><td>Friday</td><td>9 a.m. - 5 p.m.</td></tr>'+ 
'<tr><td>Saturday</td><td>9 a.m. - 12 p.m.</td></tr>'+ 
'</table>'+ 
'</body>'+ 
'</html>'; 

response.writeHead(200, {"Content-Type": "text/html"}); 
response.write(body); 
response.end(); 
} 


function start(response) { 
console.log("Request handler 'start' was called."); 

var body = '<html>'+ 
'<head>'+ 
'<meta http-equiv="Content-Type" '+ 
'content="text/html; charset=UTF-8" />'+ 
'</head>'+ 
'<body>'+ 
'<h1>Upload a file</h2>'+ 
'<p>It will be shown on the /show url after</p>'+ 
'<form action="/upload" enctype="multipart/form-data" '+ 
'method="post">'+ 
'<input type="file" name="upload" multiple="multiple">'+ 
'<input type="submit" value="Upload file" />'+ 
'</form>'+ 
'</body>'+ 
'</html>'; 

response.writeHead(200, {"Content-Type": "text/html"}); 
response.write(body); 
response.end(); 
} 

function upload(response, request) { 
console.log("Request handler 'upload' was called."); 

var form = new formidable.IncomingForm(); 
console.log("about to parse"); 
form.parse(request, function(error, fields, files) { 
console.log("parsing done"); 

/* Possible error on Windows systems: 
    tried to rename to an already existing file */ 
fs.rename(files.upload.path, "/home/ubuntu/node_stuff/node_assignment/test.jpg", function(err) { 
    if (err) { 
    fs.unlink("/home/ubuntu/node_stuff/node_assignment/test.jpg") 
    fs.rename(files.upload.path, "/home/ubuntu/node_stuff/node_assignment/test.jpg"); 
    } 
}); 
response.writeHead(200, {"Content-Type": "text/html"}); 
response.write("received image:<br/>"); 
response.write("<img src='/show' />"); 
response.end(); 
}); 
} 

function show(response) { 
console.log("Request handler 'show' was called."); 
fs.readFile("/home/ubuntu/node_stuff/node_assignment/test.jpg", "binary", function(error, file) { 
if(error) { 
    response.writeHead(500, {"Content-Type": "text/plain"}); 
    response.write(error + "\n"); 
    response.end(); 
} else { 
    response.writeHead(200, {"Content-Type": "image/jpg"}); 
    response.write(file, "binary"); 
    response.end(); 
} 
}); 
} 

exports.start = start; 
exports.upload = upload; 
exports.show = show; 
exports.home = home; 
exports.colleges = colleges; 
exports.hours = hours; 
exports.abtech = abtech; 

जो भी मैं गलत कर रहा हूं उसके बारे में कोई संकेत बहुत सराहना की जाएगी। मेरे प्रशिक्षक सप्ताहांत के दौरान पकड़ना मुश्किल है, इसलिए मेरे पास वास्तव में कहीं और नहीं है। धन्यवाद।

+1

हमेशा एक अच्छा विचार है,

अपने कोड के बाकी के लिए, आप Express या Zappa पर एक नज़र लेने के लिए कोड में थोड़ा और अधिक कॉम्पैक्ट लिखने के लिए सक्षम होने के लिए चाहते हो सकता है; यह देखने के लिए कि आप किसके साथ काम कर रहे हैं। कई ढांचे (एक्सप्रेस, रेस्टिफ़ाई इत्यादि) आपके लिए जेएसओएन पार्सिंग का ख्याल रखते हैं - खासकर यदि यह HTTP अनुरोध के माध्यम से आ रहा है। –

उत्तर

28

आपका colleges चर पहले से ही एक मान्य जावास्क्रिप्ट ऑब्जेक्ट है। आपको JSON.parse का उपयोग करने की आवश्यकता नहीं है।

JSON.parse पहले तर्क के रूप में String की अपेक्षा करता है, लेकिन आप Object प्रदान करते हैं। इस प्रकार यह String को त्रुटि संदेश में दिखाई देने वाले जैसा दिखता है। typeof (yourVar उपयोग करने के लिए))

+0

धन्यवाद थारबास। मुझे एहसास नहीं हुआ कि मुझे पार्स स्टेटमेंट की आवश्यकता नहीं थी। जब प्रशिक्षक था कक्षा में प्रदर्शन करते हुए उन्होंने इसका इस्तेमाल किया। अब यह ठीक काम कर रहा है। हम जल्द ही एक्सप्रेस और मोंगोडीबी पर जा रहे हैं। –

संबंधित मुद्दे