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
所述
我正在尝试将 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
所述