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.xml
path不能正确匹配真正的文件系统。 您正在logging__dirname
。 把事情做对吗? 你确定?