我正在尝试使用node和socket.io构建一个简单的聊天应用。我按照此处列出的教程进行操作:http://socket.io/get-started/chat/
我的问题是教程中有一些javascript直接放在html中的脚本标记中。我想将此代码移入其自己的js文件中。
我创建了一个名为chat.js的文件,该文件与index.html和index.js位于同一目录中。在我的html中,我将以下代码放在标题中(我也在结束的body标签之前尝试过)
<script type="text/javascript" src="chat.js"></script>
然而,当我在终端中运行节点index.js并转到localhost时,我获得了400的chat.js.我试过放置&#34; /chat.js"以及&#34; ./ chat.js&#34;没有运气。这三个文件都在同一目录中。
任何有关我所做错事的线索都将受到赞赏。
我的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');
});
答案 0 :(得分:3)
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获取对没有特定处理程序的路由的请求时,它将检查公共子目录以查看文件是否与请求名称匹配。如果是这样,它将自动提供该文件。