Node找不到html中包含的js文件



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

我的问题是,教程有一些javascript是直接放在html的脚本标签。我想把这段代码移动到它自己的js文件。

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

  <script type="text/javascript" src="chat.js"></script>

然而,当我在终端中运行node index.js并转到localhost时,我得到了chat.js的400。我试着把"/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(...))的一行代码中完成。

注意在你链接到的演示中,/路径有一个特定的路由。对于/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收到一个没有特定处理程序的路由请求时,它将检查public子目录,看看是否有一个文件与请求名匹配。如果是,它将自动提供该文件。

最新更新