Monday, May 13, 2024
 Popular · Latest · Hot · Upcoming
158
rated 0 times [  164] [ 6]  / answers: 1 / hits: 50001  / 12 Years ago, sat, september 29, 2012, 12:00:00

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.<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)


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 = '<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;


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.


More From » html

 Answers
83

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 ;)


[#82843] Thursday, September 27, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
austonjuancarlosb

Total Points: 238
Total Questions: 89
Total Answers: 99

Location: Chad
Member since Mon, Dec 5, 2022
1 Year ago
;