简体   繁体   English

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

[英]JSON+Node.js - Unexpected token o

I just started working with node.js and json objects in my college course. 我刚开始在大学课程中使用node.js和json对象。 One of our assignments this week was to create a few json objects and extract parts of the object into an html page. 本周我们的任务之一是创建一些json对象并将对象的一部分提取到html页面中。 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. 如果我删除了college对象和parse语句,那么节点运行正常。

Here is the error I get when I run "node index.js": 这是我运行“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. 谢谢。

Your colleges variable is already a valid JavaScript Object. 您的colleges变量已经是一个有效的JavaScript对象。 You do not have to use JSON.parse on it. 您不必在其上使用JSON.parse

JSON.parse expects a String as first argument, but you provide an Object . JSON.parse期望String作为第一个参数,但是您提供了一个Object Thus it is coerced to a String looking like the one you see in the Error message. 因此它被强制转换为类似于您在错误消息中看到的String

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 ;) 对于其余代码,您可能需要查看ExpressZappa以便能够更紧凑地编写代码;)

解决方案是使用JSON.stringify如下

var target=JSON.parse(JSON.stringify(source));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM