Nodejs 用socket.io,浏览器怎么总是提示找到不到客户端脚本socket.io.js

Nodejs 用socket.io,浏览器怎么总是提示找到不到客户端脚本socket.io.js

服务器端提示:GET /socket.io/socket.io.js 404 1ms 代码如下:express自动创建的 app.set(‘port’, process.env.PORT || 3000); app.set(‘views’, __dirname + ‘/views’); app.set(‘view engine’, ‘jade’); app.use(express.favicon()); app.use(express.logger(‘dev’)); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, ‘public’)));

// development only if (‘development’ == app.get(‘env’)) { app.use(express.errorHandler()); }

app.get(’/’, routes.index); app.get(’/users’, user.list);

http.createServer(app).listen(app.get(‘port’), function(){ console.log('Express server listening on port ’ + app.get(‘port’)); });

var io = require(‘socket.io’).listen(app);

模板文件 doctype 5 html head title= title link(rel=‘stylesheet’, href=’/stylesheets/style.css’) script(type=‘text/javascript’,src=‘socket.io/socket.io.js’) script(type=‘text/javascript’,scr=’/javascripts/jquery-1.9.1.min.js’) script(type=‘text/javascript’,src=’/javascripts/client.js’) body block content


3 回复

Nodejs 使用 socket.io 时浏览器提示找不到客户端脚本 socket.io.js

问题描述

在使用 Node.js 和 socket.io 构建实时应用时,你可能会遇到浏览器提示找不到客户端脚本 socket.io.js 的错误。具体表现为:

GET /socket.io/socket.io.js 404 1ms

代码分析

首先,让我们回顾一下你的代码片段。以下是一个典型的 Express 应用程序配置,其中包含静态文件服务设置:

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');

app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

这段代码中,app.use(express.static(path.join(__dirname, 'public'))); 这一行用于服务静态文件。因此,你需要确保 socket.io.js 文件位于 public 目录下的 socket.io 文件夹中。

示例目录结构

your-project/
├── public/
│   └── socket.io/
│       └── socket.io.js
├── views/
│   └── index.jade
├── app.js
└── package.json

解决方法

  1. 确保文件路径正确:确保 socket.io.js 文件存在于 public/socket.io/ 目录下。
  2. 检查模板文件中的引用路径:确保模板文件中的引用路径正确无误。

以下是修改后的模板文件示例:

doctype 5
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
    script(type='text/javascript', src='/socket.io/socket.io.js')
    script(type='text/javascript', src='/javascripts/jquery-1.9.1.min.js')
    script(type='text/javascript', src='/javascripts/client.js')
  body
    block content

服务器端配置

确保在服务器端正确初始化 socket.io

var express = require('express');
var path = require('path');
var http = require('http');
var socketIo = require('socket.io');

var app = express();
var server = http.createServer(app);

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');

app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

server.listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'));
});

var io = socketIo.listen(server);

通过以上步骤,你应该能够解决浏览器提示找不到 socket.io.js 的问题。


后面两段代码换成这样试试:

var server = http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

var io = require(‘socket.io’).listen(server);

当使用Socket.IO时,如果浏览器提示找不到socket.io.js,通常是因为客户端无法正确地从服务器加载该文件。这可能是由于静态文件服务没有配置好,或者路径不正确。

解决方案

你需要确保在服务器端正确地设置了静态文件目录,并且客户端请求的URL是正确的。

服务器端代码

确保你的服务器端代码中已经包含了express.static中间件来提供静态文件。你已经在代码中看到了这一点:

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

这意味着你将public文件夹中的文件作为静态资源提供给客户端。因此,你应该将socket.io.js文件放置在public文件夹下的socket.io子目录中。

例如,你的文件结构应该是这样的:

your-project/
├── public/
│   └── socket.io/
│       └── socket.io.js
├── views/
│   └── index.jade
└── app.js

客户端代码

在客户端的Jade模板中,确保你引用的路径是正确的。根据上述结构,你应该这样引用socket.io.js

script(type='text/javascript', src='/socket.io/socket.io.js')

示例代码

app.js

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

var app = express();
var server = http.createServer(app);

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');

app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
    app.use(express.errorHandler());
}

app.get('/', function(req, res) {
    res.render('index', { title: 'Chat' });
});

app.get('/users', user.list);

server.listen(app.get('port'), function() {
    console.log('Express server listening on port ' + app.get('port'));
});

io = io.listen(server);

index.jade

doctype 5
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
    script(type='text/javascript', src='/socket.io/socket.io.js')
    script(type='text/javascript', src='/javascripts/jquery-1.9.1.min.js')
    script(type='text/javascript', src='/javascripts/client.js')
  body
    block content

通过以上步骤,你应该能够解决客户端找不到socket.io.js的问题。

回到顶部