Express + socket.io:socket.io客户端脚本是404
这让我疯狂了……虽然我有Express + Socket.io的工作版本,但是我似乎无法用新的项目文件夹中的现成NPM安装来重现它。 任何人都可以指出我错过了什么…? 这是我的过程:
我在我的项目目录( pwd
)中创build一个node_modules
文件夹,然后执行:
npm install express npm install socket.io
运行这两个命令,将包放入项目的node_modules
文件夹中。 现在我使用以下方法设置我的服务器:
var express = require('express'), server = express.createServer().use( express.static(__dirname+'./public') ).listen( 8080 ), io = require('socket.io').listen(server);
我的公用文件夹包含我的应用程序的静态资产 我的公共索引HTML页面包含一个脚本标签:
<script src="/socket.io/socket.io.js"></script>
最后,我运行我的服务器脚本,并在Web浏览器中转到应用程序。 我的静态公共文件都得到了正确的服务,但是我得到了一个404的/socket.io/socket.io.js
。 现在,我可以从另一个旧项目中交换一个express
包裹,让这个整个系统工作。 不知何故,包实例configuration不同,但我不知道如何重现。 Express网站提到了安装依赖关系的一些问题,虽然运行npm install -d
似乎没有帮助(在运行npm install -d
时候是否有一个特定的pwd
)? 我想我必须在使用NPM进行安装之后丢失一些有关configuration新的Express实例的重要信息。
感谢任何和所有的洞察力!
好的,所以我的例子实际上是我的代码的缩写,而且这个例子代码确实有效。 我的问题真正的代码有点混乱,像这样:
var server = express.createServer(); server .use( server.router ) .use( express.static(__dirname+'/../public') ) .get('/api', function(req, res) { res.write('API'); }); server.listen(8080); var io = require('socket.io').listen(server);
我通过执行以下操作来修复上述代码:
server = server.listen(8080);
显然listen
命令用一些附加function来包装服务器对象。 我最初的简短的例子实际上确实工作,因为listen
被链接到服务器variables的最终返回。 有趣的小细微差别。
- 如何用Jade迭代一个数组来创build一个html表格
- 在“mongoose”(prevalidate)中间件中更改字段是否正确?
- node.js + express 3 + socket.io =发送后无法设置标题
- 不推荐使用connect.utils.parseSignedCookies,使用Express和Redis的cookie存储
- 无法使用快递加载玉石视图
- 如何在Node中的另一个控制器中调用一个控制器方法
- Express,node.js和redis:分离函数来访问数据
- Node.js Express + Jade(活动类内衬物品)
- 快递中间件来为所有app.get()填充一个Jadevariables