nodejs+express+socket.io 里面页面脚本script里面的路径/socket.io/socket.io.js是如何加载的
发布于 11 年前 作者 chjjin 17628 次浏览 最后一次编辑是 8 年前

express 通过app.use(express.static(__dirname + ‘/public’)); 来处理静态文件请求,js和css都是这样的,但是在用socket.io时候,有一个脚本路径是/socket.io/socket.io.js,这个路径的访问是通过何种机制访问得到的,请教一下,谢谢

20 回复

应该是手动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> 也是没错的,所以我很奇怪是通过什么机制来加载的

@ChJJin 嗯 谢谢 ,你是在写聊天的例子吗 有什么好的参考没,网上有几个例子,没有注解,也怕代码因为版本问题各种错 ,好痛苦这几天呀

This is because the socket.io itself route this js request, and render static js file by it own.

牛人呀,你是怎么发现的

@mengrpg1 没懂。。能详细解释下么?

@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了啊。。。模块文件夹里明明有这个啊。。求助啊

用这个 /socket.io/socket.io.js

**/**开头表示绝对路径,你那里没有用绝对路径,实际情况会根据你当前页面的路径而不同,容易出错。

@leizongmin 为什么socket.io需要这样做,而不是以静态文件的形式存下来,这样动态发送,有啥好处么?

@cony138 @leizongmin 谢谢两位管住,这个问题我已经解决的了。。因为当时我整个项目目录是自己搭建的,没用express生成,所以自己也没考虑建立静态文件目录(public那个)什么的。。。当时刚接触nodejs。。。

@cony138 其实是一个静态文件来的,而且也没强制要求一定要用/socket.io/socket.io.js这个路径,这只是socket.io为了方法使用者而已。 /socket.io/socket.io.js 这个文件是一个socket.io的浏览器客户端程序,放在任何地方都是可以的。

为什么现在用这个不能直接找到这个文件了

三楼的原理图看不到了啊 源码看不懂 小白求指教

你代码不是写了一句 var io = require(‘socket.io’).listen(server); 你还想知道什么

回到顶部