Node.js + Express + Socket.io无法将JavaScript文件加载到index.html中。

4
我正在开发一个应用程序,服务器目前已经设置好并且运行良好。
这是访问服务器时显示的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" 吗?虽然可能性不大,但这样做可能会解决问题。 - kasoban
是的,我也尝试过那个。 - Wlbck
目前,服务器只会在访问页面时传输index.html的内容,没有其他内容。你可能正在寻找的是express.static。 - kasoban
你知道 express.static 是什么意思吗? - Wlbck
http://expressjs.com/guide/using-middleware.html#middleware.built-in - kasoban
显示剩余2条评论
1个回答

3
如果HTML文件和脚本位于同一路径下,则使用相对路径,例如 src="main.js"。如果仍然不起作用,可能是Express的问题。
将以下代码添加到您的app.js文件中:
app.use(express.static(__dirname + '/scripts'));

脚本可以通过相对于 /scripts 的路径访问,例如:从 http://yourdomain/script.js 访问 main.js ,但不能从 http://yourdomain/scripts/main.js 访问。

抱歉我的英语不太好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接