节点js ENOENT错误

运行这个代码给我这个错误,试图找出一个小时,但失败

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) 

你看到的是客户对favicon.ico的请求。 有两个请求在这里执行(因此,你看到两次日志)。 浏览器要求页面 favicon.ico文件,代表您在书签和地址栏左侧看到的小小图标:)

你的问题是在var file = query.f + query.t; – 当你访问页面时这是有道理的,但是当你的浏览器隐式访问favicon.ico时没有意义。

你只是console.log的错误,而不是从它返回,这意味着你JSON.parse一个未定义的值 – 抛出了规范中定义的语法错误(只是尝试打开控制台,并inputJSON.parse(窗口。 x)在你的浏览器中)

(当ENOENT试图打开"NaN_m1.json"时,你可以看到这个)

您可以在调用url.parse之前将其添加到您的服务器,但是如果您打算将其设置得更大 – 正确的路由可能会更好:

 if (req.url === '/favicon.ico') { r.writeHead(200, {'Content-Type': 'image/x-icon'} ); return r.end(); }