运行此代码给我这个错误,试图找出一小时但失败
var http = require('http');
var url = require('url');
var fs = require('fs');
var port = 3010;
http.createServer(function(req, res){
var query = url.parse(req.url,true).query;
console.log(query);
var file = query.f + query.t;
//var file = "eurusd_m1.json";
console.log(file);
var eurusd;
fs.readFile('data/' + file + '_m1.json', function(err,data){
if (err){
console.log(err);
}
eurusd = JSON.parse(data);
console.log(eurusd);
});
res.writeHead(200,{'content-type':'text/plain'});
res.end("helllo owrld");
}).listen(port);
console.log("server running at port 3010..");
它给了我以下结果:
server running at port 3010..
{ f: 'eur', t: 'usd' }
eurusd
{}
NaN
{ [Error: ENOENT, open 'C:\Users\Administrator\Documents\zeromq\data\NaN_m1.json']
errno: 34,
code: 'ENOENT',
path: 'C:\\Users\\Administrator\\Documents\\zeromq\\data\\NaN_m1.json' }
undefined:1
undefined
^
SyntaxError: Unexpected token u
at Object.parse (native)
at C:\Users\Administrator\Documents\zeromq\dataserver.js:17:17
at fs.js:207:20
at Object.oncomplete (fs.js:107:15)
答案 0 :(得分:2)
您所看到的是客户对favicon.ico
的请求。这里有两个请求(因此,您会看到两次日志)。浏览器要求页面和为favicon.ico文件,表示书签时和地址栏左侧看到的小小图标:)
您的问题出现在var file = query.f + query.t;
中 - 当您访问该页面时这是有意义的,但在浏览器隐式访问favicon.ico时没有意义。
你只是console.log
错误而不是从它返回,这意味着你对未定义的值JSON.parse - 这会抛出规范中定义的语法错误(只需尝试打开控制台并输入JSON)浏览器中的.parse(window.x)
(ENOENT试图打开"NaN_m1.json"
时可以看到这一点)
您可以在调用url.parse
之前将其添加到您的服务器,但如果您打算将其设置得更大 - 正确的路由可能更好:
if (req.url === '/favicon.ico') {
r.writeHead(200, {'Content-Type': 'image/x-icon'} );
return r.end();
}