表达 js - 套接字 io 连接

express js - socket io connection

无法集成socket io和express js。 下面是我的 html 代码。

<html>
<head>
</head>
<body>
hello world.
<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
   var socket = io();
</script>
</body>
</html>

这是我的app.js express js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

var server = require('http').Server(app);
var io = require('socket.io')(server);

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.get('/', function(req, res){
  res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

io.on('connection', function(socket){
  console.log('client connected.');
});

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});

module.exports = app;

问题:无法将套接字 io 与 express 连接。 下面是显示开发者控制台错误的图像,当我 运行 应用程序时。

使用相同的代码,删除 var routes = ...var users = ...

并在末尾添加 server.listen(3000); 而不是导出它对我有用。

https://dripr.io/file/NkWBbbHR

const http = require("http");
const port = 4000;
const { joinUser, removeUser, findUser } = require('./users');

const app = http.createServer((req, res) => {
    res.writeHead(200, headers);
    res.end("API");
    return;
});

const server = app.listen(port, () => {
    console.log('Server Started..');
});

const io = require("socket.io")(server, {
    cors: {
        origin: "*",
        methods: ["GET", "POST"]
    }
});

io.on('connection', (socket) => {
    console.log('socket connected..', socket.id);
    socket.on('chat', (data) => {  
        io.sockets.emit('send data', {
            id: socket.id
        });
    io.sockets.emit('chat', { data: data, id: socket.id });
});

socket.on('typing', (data) => {
    socket.broadcast.emit('typing', data);
});

socket.on("disconnect", () => {
    const user = removeUser(socket.id);
    console.log(user);
    if (user) {
        console.log(user.username + ' has left');
    }
    console.log("disconnected");
    });
}); 

这段代码对我有用

const express  = require('express')
const socketIo = require('socket.io')
const http = require('http')

const app = express()

const server = http.createServer(app)
const io = socketIo(server)

io.on('connection',(socket)=>{
    console.log('client connected: ',socket.id)
    socket.on('disconnect',(reason)=>{
        console.log(reason)
    })
})

server.listen(5000, err=> {
    if(err) console.log(err)
    console.log('Server running on Port ', PORT)
})