2013-09-15 3 views
2

работает этот код дает мне эту ошибку, пытаясь наряжать, так как час, но неузла расслоение плотной 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) 

+0

'NaN_m1.json'. Это не ваше имя файла? 'Var file = query.f + query.t' оценивает' NaN', что, вероятно, не то, что вы хотите. Распечатайте 'query', чтобы узнать, поддерживает ли он ожидаемые значения. – xbonez

ответ

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(); 
} 
+0

благодарит Бенджамина за быстрый ответ, но как его NaN, я могу видеть его, прежде чем давать ему readFile в console.log, что он плюет eurusd, то почему он берет его как NaN. как я должен исправить эту идею. – zishan

+0

@zishan попробуйте 'console.log (req.url)' сверху - посмотрите, к каким адресам обращаются. В браузере отправляются _two_ запросы, а не один (следовательно, двойной журнал для остальных). Определите, соответствует ли url маршруту, который вы хотите, и действуйте соответственно :) –

+0

@zishan the NaN, который вы видите, является 'undefined + undefined', кстати, - это параметры запроса для' favicon.ico'. Если я могу предложить вводную книгу, я нашел nodebeginner.org весьма полезной. –

Смежные вопросы