节点没有找到html中包含的js文件

我正在尝试使用node和socket.io构建一个简单的聊天应用程序。 我按照这里列出的教程: http : //socket.io/get-started/chat/

我的问题是该教程有一些javascript直接放在html中的脚本标记中。 我想将此代码移动到它自己的js文件中。

我创建了一个名为chat.js的文件,它与index.html和index.js位于同一目录中。 在我的HTML中,我将以下代码放在标题中(我也在结束的body标签之前尝试过)

 

但是,当我在终端中运行节点index.js并转到localhost时,我获得了400的chat.js. 我试过放“/chat.js”以及“./chat.js”没有运气。 所有三个文件都在同一目录中。

任何有关我做错的线索都将受到赞赏。

我的index.js

 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'); }); io.on('connection', function(socket){ socket.on('chat message', function(msg){ io.emit('chat message', msg); }); }); http.listen(3000, function(){ console.log('listening on *:3000'); }); 

node.js不会像其他Web服务器那样自动提供任何文件。 如果您希望它在浏览器请求时发送chat.js ,您必须在node.js代码中为它创建一个路由,以便Web服务器发送它。

如果您使用类似Express框架的东西,可以使用app.use(express.static(...))在一行代码中完成。

请注意,在您链接的演示中, / path的具体路由如何。 您需要/chat.js的类似路线,或者您可以使用app.use(express.static(...))来配置整个文件目录的自动服务。

将来,如果您显示实际的服务器代码,那么我们可以更专门地帮助您使用适合您服务器的实际代码。


现在您已经显示了代码,您可以为/chat.js添加特定路由:

 app.get('/chat.js', function(req, res){ res.sendFile(__dirname + '/chat.js'); }); 

或者,如果您将chat.js移动到应用程序代码下的public子目录中,那么您可以使用以下命令自动提供该目录中的所有文件:

 app.use(express.static('public')); 

当Express获取对没有特定处理程序的路由的请求时,它将检查公共子目录以查看文件是否与请求名称匹配。 如果是这样,它将自动提供该文件。