2013-07-31 2 views
1

Socket.io, похоже, не обслуживает файл socket.io.js со связью.node.js - GET [[имя хоста]]/socket.io/1/ - 404 (не найдено)

вот мой server.js код:

var app = require('http').createServer(handler), 
    io = require('socket.io').listen(app), 
    xml2js = require('xml2js'), 
    parser = new xml2js.Parser(), 
    fs = require('fs'); 

// creating the server (localhost:8000) 
app.listen(8080); 


// on server started we can load our client.html page 

function handler(req, res) { 
     console.log('liccy'); 

    fs.readFile(__dirname + '/', function(err, data) { 
    if (err) { 
     console.log(err); 
     res.writeHead(500); 
     return res.end('Error loading client.html'); 
    } 
    res.writeHead(200); 
    res.end(data); 
    }); 
} 

// creating a new websocket to keep the content updated without any AJAX request 
io.sockets.on('connection', function(socket) { 
    console.log(__dirname); 
    // watching the xml file 
    fs.watch(__dirname + '/example.xml', function(curr, prev) { 
    // on file change we can read the new xml 
    fs.readFile(__dirname + '/example.xml', function(err, data) { 
     if (err) throw err; 
     // parsing the new xml data and converting them into json file 
     parser.parseString(data); 
    }); 
    }); 
    // when the parser ends the parsing we are ready to send the new data to the frontend 
    parser.addListener('end', function(result) { 

    // adding the time of the last update 
    result.time = new Date(); 
    socket.volatile.emit('notification', result); 
    }); 
}); 

и мой HTML-код:

<script src="/node/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script> 
    <script> 
    // creating a new websocket 
     var socket = io.connect('http://betty.dev'); 
     // on every message recived we print the new datas inside the #container div 
     socket.on('notification', function (data) { 
     $('.test').html(data.test.sample[0]); 
     $('time').html('Last Update:' + data.time); 
     }); 
    </script> 

И мой файл XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<test> 
    <sample>Hi 1!</sample> 
</test> 

Я получаю эту ошибку, когда пытается загрузить страницу:

info - socket.io started 
    debug - client authorized 
    info - handshake authorized HPdjzW_pVy49g0bD6azs 
    debug - setting request GET /socket.io/1/websocket/HPdjzW_pVy49g0bD6azs 
    debug - set heartbeat interval for client HPdjzW_pVy49g0bD6azs 
    debug - client authorized for 
    debug - websocket writing 1:: 
/Users/user/webserver/betty/www/node 

fs.js:1051 
    throw errnoException(process._errno, 'watch'); 

Не уверен, что это проблема:/

ответ

3

здесь исправление моей проблемы:

var app = require('http').createServer(handler), 
    io = require('socket.io').listen(app), 
    fs = require('fs'), 
    homeFile = __dirname + '/home', 
    jsonFile = __dirname + '/home/data'; 
app.listen(8080, 'test.dev'); 

function handler(req, res) { 
    fs.readFile(homeFile, function(err, data) { 
     if (err) { 
      res.writeHead(500); 
      return res.end('Error loading home'); 
     } 

     res.writeHead(200); 
     res.end(data); 
    }); 
} 

io.sockets.on('connection', function(socket) { 
    fs.watchFile(jsonFile, function (curr, prev) { 
      console.log('the current mtime is: ' + curr.mtime); 
      console.log('the previous mtime was: ' + prev.mtime); 


     fs.readFile(jsonFile, function(err, data) { 
      if (err) throw err; 

      var data = JSON.parse(data); 
      socket.emit('notification', data); 
     }); 
    }); 
}); 
+0

Я не думаю, что могу «принять» свой собственный ответ: / – Darkagelink

1

Попробуйте этот URL в браузере:

<script src="/socket.io/socket.io.js"></script> 

(Нет, этот URL не соответствует файлу на диске, но это нормально. socket.io правильно запустит браузер JS).

Также не обязательно или желательно сделать вашу папку node_modules доступной браузеру.

Update

ОК, так что после того, как вы зафиксировали URL в вашем <script> теге, теперь у вас есть успешное соединение socket.io WebSocket. Ура! Теперь ваш код fs бросает исключение. С одной стороны, если вы хотите readFile вернуть строку, а не буфер, вам необходимо пройти кодирование:

fs.readFile(__dirname + '/example.xml', 'utf8', function(err, data) { 

Update 2

fs.watch Так бросает исключение. Вероятно, ваш путь к example.xml не соответствует реальной файловой системе. Вы регистрируете __dirname. Правильно ли все соответствует? Ты уверен?

+0

Да, то socket.io материал в настоящее время работает, но есть ошибка в коде фс. –

+0

thx для обновления, к сожалению, это не исправить ... – Darkagelink

+0

@PeterLyons вы знаете, как вы это сделаете, когда сервер находится на другом порту, то есть: back-end - localhost: 9003, а клиент - localhost: 9002? – Ken

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