node.js – GET ] / socket.io/1/ – 404(Not Found)

Socket.io似乎没有提供连接的socket.io.js文件。

这里是我的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'); 

不知道是什么问题:/

这里是解决我的问题:

 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); }); }); }); 

在浏览器中试试这个url:

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

(不,这个URL不对应于磁盘上的文件,但没关系,socket.io将正确地服务于浏览器JS)。

使您的node_modules文件夹可用于浏览器也没有必要或不可取。

更新

好的,所以在你修改了<script>标签中的URL之后,你现在有了一个成功的socket.io websocket连接。 好极了! 现在,你的fs代码抛出一个exception。 首先,如果你想让readFile返回一个string而不是一个缓冲区,你需要传递一个编码:

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

更新2

所以fs.watch抛出一个exception。 可能你的example.xmlpath不能正确匹配真正的文件系统。 您正在logging__dirname 。 把事情做对吗? 你确定?