SocketIO- GET http://localhost: 3000/socket.io/? EIO = 3 & transport = polling & t = 1418187395022-0 404 (не найдено)
Я использую socketIO с выражением.
В моем проекте у меня есть страница входа и домашняя страница.
Когда я делаю успешный вход в систему, я перехожу к localhost: 3000/home, где я получаю эту ошибку:
GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1418187395022-0 404 (Not Found)
Я не делал никаких изменений в моем app.js(проект, созданный экспресс).
Index.js:
var express = require('express');
var router = express.Router();
var http = require('http');
var fs = require('fs');
var io = require('socket.io')(http);
/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'Express' });
});
router.get('/home', function(req, res) {
res.render('home', { title: 'Express' });
});
io.on('connection', function(socket){
console.log("User Connected");
socket.on('chat message', function(msg){
io.emit('chat message', msg);
console.log("Message");
});
socket.on('disconnect', function(msg){
console.log("User DisConnected");
});
});
router.post('/authenticate', function(req, res) {
fs.readFile("./public/Verification/Users.json", "utf8", function (err, data) {
if (err)
console.log(err);
else{
var result = JSON.parse(data);
for(var i=0;i<result.Users.length;i++){
if(req.body.username == result.Users[i].username && req.body.password == result.Users[i].password){
console.log("Success!!!!!!!!!!!!!!");
res.location("home");
res.redirect("home");
}
}
}
});
});
module.exports = router;
Я получаю эту ошибку всякий раз, когда я перехожу к localhost: 3000/home. Я новичок в socketIO и express.
Скажите, пожалуйста, если я что-то упустил.
Спасибо
ИЗМЕНИТЬ
В моем layout.jade я определил socketio следующим образом:
script(src='https://cdn.socket.io/socket.io-1.2.0.js')
Ответы
Ответ 1
Если вы используете Express 4, мне кажется, что вам не хватает строк кода:
var app = express();
var server = app.listen(3000);
Это запустит ваш веб-сервер и установит его на порт 3000. См. здесь простое приложение Express 4 для кости: http://expressjs.com/4x/api.html
И затем, чтобы запустить socket.io, вы добавили бы:
var io = require('socket.io').listen(server);
И нет необходимости в этой строке:
var http = require('http');
Ответ 2
Поскольку я боролся с этой проблемой в течение последних 5 часов. И это первый результат в google.
Конечно, его 2015 год и некоторые из кода изменились.
Я думаю, что в настоящее время лучшим началом кода index.js является:
var express = require('express'),
http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(3000);
Порядок очень важен.
Моя проблема заключалась в том, что все было установлено правильно, и node прослушивал. Однако example.com/socket.io/socket.io.js и example.com/socket.io/?eio =... не было найдено 404.
Однако, когда я попробовал example.com:3000/socket.io/socket.io.js, все сработало. Итак, теперь встал вопрос, как изменить запрос getJSON на часть порта.
Итак, решение заключалось в редактировании main.js, который добавляется в index.html, где находится ваш чат.
Существует:
var socket = io();
заменить на
var socket = io.connect('http://example.com:3080');
Это исправляет URL-адрес запросов getJSON и добавляет правильный порт и не более 404. Надеюсь, это поможет кому-то в будущем.
Ответ 3
Вот как я решаю это на стороне сервера (2018):
const app = express();
const socketIO = require('socket.io');
const server = express()
.use(app)
.listen(PORT, () => console.log('Listening Socket on ${ PORT }'));
const io = socketIO(server);
На стороне клиента
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.1/socket.io.js"></script>
Это выглядит просто, но я потратил часы, прежде чем нашел решение, так как приведенные выше решения не сработали для меня.
Ответ 4
просто вызовите прослушивание сервера и с помощью обратного вызова я передал экземпляр сервера в модуль.
часть файла bin/www
из экспресс-приложения
var server = http.createServer(app);
server.listen(port, function () {
console.log('app listening on *:' + port);
require('../socket')(server);
console.log('socket server will be on *:' + port);
});
server.on('error', onError);
server.on('listening', onListening);
и вот как мой сокет модуль socket.js
var io = {};
module.exports = (server, serveradmin) => {
io = require('socket.io')(server);
io.on('connection', function (socket) {
console.log(socket + ' a user connected');
});
}
все слушатели сокета и испускают управление отсюда.