express 通过app.use(express.static(__dirname + ‘/public’)); 来处理静态文件请求,js和css都是这样的,但是在用socket.io时候,有一个脚本路径是/socket.io/socket.io.js,这个路径的访问是通过何种机制访问得到的,请教一下,谢谢
应该是手动copy到目录来,大哥我也在做这个例子,express 3.0 是这样用吗var io= require(‘socket.io’).listen(app); 怎么我这有个提示:
Socket.IO’s listen()
method expects an http.Server
instance
as its first parameter. Are you migrating from Express 2.x to 3.x?
If so, check out the “Socket.IO compatibility” section at:
https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
info - socket.io started
var server = http.createServer(app).listen(app.get(‘port’), function(){ console.log("Express server listening on port " + app.get(‘port’)); }); var io = require(‘socket.io’).listen(server); 换成这样,官网上有说; 那个socket.io.js文件,开始我也以为是手动copy到静态目录,但是发现,就算不copy,然后这样写:
<script src="/socket.io/socket.io.js" type="text/javascript"></script> 也是没错的,所以我很奇怪是通过什么机制来加载的@booxood 我的理解是 一般我们在页面不是都引入很多外部文件吗,当读到那一句时,就会去服务器下载,特别的当遇到 socket.IO开头, 服务器做了特殊处理,回去node_models下相应的文件夹传给客户端,不知道这样理解对不对
@mengrpg1 假如你平时用的是express模块,那么一般情况下请求的文件都是从public目录里面查找的(express.static中间件中设置的路径), 当你使用了socket.io模块后,socket.io会把以 /socket.io 开头的请求都给截拦了下来,其他的请求再让express处理。 因此,当请求 /socket.io/socket.io.js 的时候,不用纠结于为什么你没有这个文件它也能返回内容,你只要知道这个是 socket.io 里面的文件,有什么用途即可。
为什么我的客户端网页通过<script src="socket.io/socket.io.js"></script>的方式加载socket.io却提示404了啊。。。模块文件夹里明明有这个啊。。求助啊
@cony138 @leizongmin 谢谢两位管住,这个问题我已经解决的了。。因为当时我整个项目目录是自己搭建的,没用express生成,所以自己也没考虑建立静态文件目录(public那个)什么的。。。当时刚接触nodejs。。。
@cony138 其实是一个静态文件来的,而且也没强制要求一定要用/socket.io/socket.io.js这个路径,这只是socket.io为了方法使用者而已。 /socket.io/socket.io.js 这个文件是一个socket.io的浏览器客户端程序,放在任何地方都是可以的。