JSON + Node.js – 意外的令牌o

我刚刚开始在大学课程中使用node.js和json对象。 本周我们的任务之一是创build一些json对象,并将对象的一部分提取到html页面中。 我以为我对如何做到这一点有很好的把握,但是当我尝试启动节点时,我遇到了一个错误。 如果我删除了大学对象和parsing语句,那么节点运行良好。

这里是我运行“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) 

这是我正在使用的代码。

 var querystring = require("querystring"), fs = require("fs"), formidable = require("formidable"); var colleges = [ {"name":"AB 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">AB 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 am - 7 pm</td></tr>'+ '<tr><td>Friday</td><td>9 am - 5 pm</td></tr>'+ '<tr><td>Saturday</td><td>9 am - 12 pm</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; 

任何有关我做错了什么暗示将非常感激。 我的教练在周末很难得到,所以我没有其他地方可以转身。 谢谢。

您的collegesvariables已经是一个有效的JavaScript对象。 你不必使用JSON.parse就可以了。

JSON.parse期望一个String作为第一个参数,但是你提供一个Object 。 因此它被强制为一个看起来像你在错误信息中看到的String

对于其他代码,您可能需要查看Express或Zappa以使代码更紧凑;)