Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

JSON+Node.js - Unexpected token o

JSON+Node.js - Unexpected token o

Problem

I just started working with node.js and json objects in my college course. One of our assignments this week was to create a few json objects and extract parts of the object into an html page. I thought I had a good grasp on how to do this, but I am running into an error when I try to start node. If I remove the colleges object and the parse statement then node runs fine.

Here is the error I get when I run "node index.js":

undefined:1
[object Object],[object Object],[object Object],[object Object],[object Object
 ^
SyntaxError: Unexpected token o
at Object.parse (native)
at Object. (/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. (/home/ubuntu/node_stuff/node_json/index.js:3:23)
at Module._compile (module.js:449:26)

And here is the code I am working with.

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 = ''+
''+
''+
''+
''+
'
    '+ '
  • ' + college[0].name + '
  • '+ '
  • ' + college[0].street + '
  • '+ '
  • ' + college[0].city + ' ' + college[0].state + ' ' + college[0].zip + '
  • '+ '
  • ' + college[0].phone + '
  • '+ '
'+ ''+ ''; response.writeHead(200, {"Content-Type": "text/html"}); response.write(body); response.end(); } function unca(response) { console.log("Request handler 'abtech' was called."); var body = ''+ ''+ ''+ ''+ ''+ '
    '+ '
  • '+ '
  • '+ '
  • '+ '
  • '+ '
'+ ''+ ''; response.writeHead(200, {"Content-Type": "text/html"}); response.write(body); response.end(); } function home(response) { console.log("Request handler 'home' was called."); var body = ''+ ''+ ''+ ''+ ''+ '

Welcome to College'+ '

Where would you like to visit?

'+ '
    '+ '
  • Colleges
  • '+ '
  • Hours of Operation
  • '+ '
  • Upload a Photo
  • '+ '
  • View Gallery
  • '+ '
'+ ''+ ''; response.writeHead(200, {"Content-Type": "text/html"}); response.write(body); response.end(); } function colleges(response) { console.log("Request handler 'colleges' was called."); var body = ''+ ''+ ''+ ''+ ''+ '

Colleges'+ '
    '+ '
  • A-B Tech
  • '+ '
  • UNC Asheville
  • '+ '
  • UNC Charlotte
  • '+ '
  • Western Carolina
  • '+ '
  • NC State
  • '+ '
'+ ''+ ''; response.writeHead(200, {"Content-Type": "text/html"}); response.write(body); response.end(); } function hours(response) { console.log("Request handler 'gallery' was called."); var body = ''+ ''+ ''+ ''+ ''+ '

Hours of Operation'+ '

'+ ''+ ''+ ''+ '
Monday - Thursday9 a.m. - 7 p.m.
Friday9 a.m. - 5 p.m.
Saturday9 a.m. - 12 p.m.
'+ ''+ ''; response.writeHead(200, {"Content-Type": "text/html"}); response.write(body); response.end(); } function start(response) { console.log("Request handler 'start' was called."); var body = ''+ ''+ ''+ ''+ ''+ '

Upload a file'+ '

It will be shown on the /show url after

'+ '
'+ ''+ ''+ '
'+ ''+ ''; 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:
"); response.write(""); 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;

Any hints about what I am doing wrong would be very much appreciated. My instructor is tough to get a hold of during the weekend, so I don't really have anywhere else to turn. Thank you.

Problem courtesy of: Daniel Leach

Solution

Your colleges variable is already a valid JavaScript Object. You do not have to use JSON.parse on it.

JSON.parse expects a String as first argument, but you provide an Object. Thus it is coerced to a String looking like the one you see in the Error message.

For the rest of your code, you might want to take a look at Express or Zappa to be able to write the code a bit more compact ;)

Solution courtesy of: Tharabas

Discussion

View additional discussion.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

JSON+Node.js - Unexpected token o

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×