Socket.io 快速静态路径连接问题

Socket.io issue with express static path join

我正在尝试将 socket.io 配置到节点应用程序中,但我有一个快速静态路径:

app.use(express.static(path.join(__dirname, 'public')));

在客户端,socket.io 请求如下所示:

var socket = io.connect('http://MyIP:6969/lanmode');

在 header 我有脚本 link 声明从 CDN 中正确提取。

生成错误 404,找不到 /socket.io 的目录,因为他的位置在 /node_modules/socket.io/ 而我的 'public' 路径是:/public/ 所以我无法访问套接字文件夹。

我的 server.js 文件如下所示:

// server.js

// set up ======================================================================
// get all the tools we need
//var $ = require('jquery'),
//    XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;



var path = require('path'),
    fs = require('fs');
var express  = require('express');
var app      = express();
var port     = process.env.PORT || 6969;
var mongoose = require('mongodb');
var mongoose = require('mongoose');
var passport = require('passport');
var flash    = require('connect-flash');

var morgan       = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser   = require('body-parser');
var session      = require('express-session');

var configDB = require('./config/database.js');


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

// configuration ===============================================================
mongoose.connect(configDB.url); // connect to our database

require('./config/passport')(passport); // pass passport for configuration

// set up our express application
app.use(morgan('dev')); // log every request to the console
app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser()); // get information from html forms
app.use(express.static(path.join(__dirname, 'public')));//Recursos necessaris tals com imatges, css, js etc

app.set('view engine', 'ejs'); // set up ejs for templating

// required for passport
app.use(session({ secret: 'ilovescotchscotchyscotchscotch' })); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session

// routes ======================================================================
require('./app/routes.js')(app, passport); // load our routes and pass in our app and fully configured passport

// launch ======================================================================
app.listen(port);
console.log('Visiteu la ip corresponent amb port ' + port +' per a visualitzar el projecte');

有人可以帮忙吗?谢谢

在 Express 和 socket.io 组合的情况下,您必须使 http.Server 实例(不是 Express app 对象)成为侦听器才能启用 socket.io拦截以/socket.io.

开头的请求

所以尝试替换

app.listen(port);

与:

http.listen(port);

docs

所述