节点js ENOENT错误

时间:2013-09-15 22:17:02

标签: node.js

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

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)

1 个答案:

答案 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();
}