node.js + express + socket.io 无法将 javascript 文件加载到 index.html
Posted
技术标签:
【中文标题】node.js + express + socket.io 无法将 javascript 文件加载到 index.html【英文标题】:node.js + express + socket.io cannot load javascript files into index.html 【发布时间】:2015-05-21 08:55:01 【问题描述】:我正在开发一个应用程序,服务器目前已设置好并且运行良好。
这是您访问服务器时显示的 index.html:
<!doctype html>
<html>
<head>
<title>Socket.IO chat</title>
</head>
<body>
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script type="text/javascript" src="./client.js"></script>
<script type="text/javascript" src="./main.js"></script>
</body>
</html>
但是,在导入位于同一目录中的那些 javascript 文件时,我收到 404 错误“加载资源失败:服务器响应状态为 404(未找到)”。
这是我的服务器代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res)
res.sendFile(__dirname+'/index.html'); // DO I NEED TO SEND THE OTHER FILES HERE ASWELL?
);
io.on('connection', function(socket)
console.log('a user connected');
socket.on('disconnect', function()
console.log('user disconnected');
);
socket.on('chat message', function(msg)
console.log('message: ' + msg);
io.emit('chat message', msg);
);
);
http.listen(3000, function()
console.log('listening on *:3000');
);
谢谢!
【问题讨论】:
您是否尝试使用src="client.js"
而不是src="./client.js"
?远射,但可能会解决问题。
是的,我也试过了。
嗯,那么我想您的资源没有通过应用程序公开,在这种情况下,您必须以与 res.sendFile() 类似的方式访问它们。例如,有一种方法可以公开整个目录,但具体方法记不清了。
就目前而言,服务器只会在页面被访问时传输 index.html 的内容,没有别的。您可能正在寻找的东西是 express.static
express.static 是什么意思?
【参考方案1】:
如果 HTML 文件与脚本位于同一路径,则使用相对路径,例如 src = "main.js"
。如果还是不行,可能是 Express 的问题。
将以下代码添加到您的app.js
:
app.use(express.static(__dirname + '/scripts'));
脚本可以从相对于/scripts
的路径访问- 例如 从http://yourdomain/script.js
但不能从http://yourdomain/scripts/main.js
访问main.js
。
对不起我的英语。
【讨论】:
以上是关于node.js + express + socket.io 无法将 javascript 文件加载到 index.html的主要内容,如果未能解决你的问题,请参考以下文章