2013-10-14 4 views
2

Этот вопрос задан ранее, но не нашел решения в предыдущих ответах.socket.io.js не найден на клиенте

Socket.IO дает мне две проблемы:

  1. стороне сервера дал эту ошибку - Ошибка - прислушайтесь EACESS Я прочитал StackOverflow и решил это с выдачей команды SUDO для запуска сервера.
  2. Теперь не кажется клиентской найти socket.io.js файл как на линии сценария -

Я понимаю, файл не найден с помощью инструментов разработчика Chrome консоль, которая имеет ошибку 404 по файлу.

Я читал, что этот файл создается на лету сервером. Но я сделал «ls-a» в корневой папке. Не удалось найти файл socket.io/socket.io.js.

Любые идеи?

Для справки вот мой код сервера -

var http = require('http'), 
    path = require("path"), 
    url = require("url"), 
    fs = require("fs"), 
    mime = require("mime"), 
    io = require("socket.io").listen(server); 
var homepath = "."; 
var server = http.createServer(function (req, res) { 
    var uri = url.parse(req.url).pathname; 
    var filepath = path.join(homepath, uri); 
    console.log(filepath); 
    path.exists(filepath, function (exists) { 
    if (!exists) { 
     //404 response 
     res.writeHead(404, { 
     "Content-Type": "text/plain" 
     }); 
     res.write("404 File not Found \n"); 
     res.end(); 
    } else { 
     if (fs.statSync(filepath).isDirectory()) { 
     filepath += '/index.html'; 
     filepath = path.normalize(filepath); 
     } 
     fs.readFile(filepath, "binary", function (err, data) { 
     if (err) { 
      res.writeHead(500, { 
      'Content-Type': 'text/plain' 
      }); 
      res.write('500 File read error \n'); 
      res.end(); 
     } else { 
      var contentType = mime.lookup(filepath); 
      res.writeHead(200, { 
      'Content-Type': contentType 
      }); 
      res.write(data, 'binary'); 
      res.end(); 
     } 
     }); 
    } 
    }); 
    //sockets part starts here 
    io.sockets.on('connection', function (socket) { 
    socket.on('test', function (data) { 
     console.log('i got something'); 
     console.log(data.print); 
    }); 
    }); 
}); 
server.listen(3000); 
server.on('error', function (e) { 
    console.log(e); 
}); 
console.log('Server listening on Port 3000'); 
+0

Вы установили с помощью npm? – plalx

+0

Да, я установил через npm. –

ответ

5

Проблема здесь состоит в том, что вы говорите Socket.io слушать на сервере, который еще не существует, в результате чего не EACCES и, следовательно, обслуживающий файл клиента. Это то, что вы делаете:

// the HTTP server doesn't exist yet 
var io = require('socket.io').listen(server); 
var server = http.createServer(); 

И если вы видели в вашей стороне сервера консоли ошибок, вы получите следующее:

info: socket.io started 
warn: error raised: Error: listen EACCES 

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

var server = http.createServer(); 
var io = require('socket.io').listen(server); 

После Socket.io слушает должным образом, он будет автоматически обслуживать файл клиента в /socket.io/socket.io.js. Вам не нужно его искать или обслуживать вручную.

+0

Спасибо. было довольно чертовски правильно. –

2

Клиентский файл, который нужно находится внутри node_modules папку здесь:

node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js 

Socket.io должен обслуживать этот файл, хотя так вам не нужно копировать его в другом месте. Например, если вы используете свой сервер Socket.io на:

http://localhost:5000 

Затем скрипт будет подан от:

http://localhost:5000/socket.io/socket.io.js 

Если вы потребляете Socket.io из другого приложения или другого порта относительных URL в вашем примере кода не будет работать. Вы хотите включить клиентский скрипт вручную или попробовать включить модуль узла клиента (если он используется узловым приложением).

Вы можете просматривать репозиторий клиента здесь для получения дополнительной информации: https://github.com/LearnBoost/socket.io-client

+0

Я использую только node.js. Порт 3000.Однако я вручную создал файловый сервер в nodejs без использования express. Таким образом, код сервера попытается найти файл, расположенный в socket.io/socket.io.js, который он не найдет. Как тогда все сложится? –

+0

Нет файла на диске в socket.io/socket.io.js. Он выполняется динамически сокет.io из другого места (см. Метод здесь https://github.com/LearnBoost/socket.io/blob/master/lib/index.js#L145). Если вы справляетесь с этим самостоятельно, это, вероятно, никогда не попадет в socket.io для этого запроса. –

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