Javascript Express+;socket.io:socket.io客户端脚本是404

Javascript Express+;socket.io:socket.io客户端脚本是404,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,这让我快发疯了。。。虽然我有一个Express+Socket.io的工作版本,但如果在新的项目文件夹中安装现成的NPM,我似乎无法复制它。谁能指出我遗漏了什么。。。?以下是我的流程: 我在我的项目目录(pwd)中创建一个node\u modules文件夹,然后执行以下操作: npm install express npm install socket.io 运行这两个命令会按预期将包放入项目的node\u modules文件夹中。现在,我使用以下设置服务器: var express = req

这让我快发疯了。。。虽然我有一个Express+Socket.io的工作版本,但如果在新的项目文件夹中安装现成的NPM,我似乎无法复制它。谁能指出我遗漏了什么。。。?以下是我的流程:

我在我的项目目录(
pwd
)中创建一个
node\u modules
文件夹,然后执行以下操作:

npm install express
npm install socket.io
运行这两个命令会按预期将包放入项目的
node\u modules
文件夹中。现在,我使用以下设置服务器:

var express = require('express'),
    server = express.createServer().use( express.static(__dirname+'./public') ).listen( 8080 ),
    io = require('socket.io').listen(server);
server = server.listen(8080);
我的
public
文件夹包含我的应用程序的静态资产。My public index HTML页面包含一个脚本标记,用于:

<script src="/socket.io/socket.io.js"></script>

最后,运行服务器脚本并在web浏览器中转到应用程序。我的静态公共文件都得到了正确的服务,但是我得到了404 for
/socket.io/socket.io.js
。现在,我可以从另一个旧项目中交换
express
包,让整个系统工作。不知何故,这个包实例的配置不同,但我不知道如何重现它。Express网站提到了一些关于安装依赖项的内容,尽管运行
npm install-d
似乎没有帮助(在运行
npm install-d
时,是否有一个特定的
pwd
?)。我想,在使用NPM安装新的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);
我通过执行以下操作修复了上述代码:

var express = require('express'),
    server = express.createServer().use( express.static(__dirname+'./public') ).listen( 8080 ),
    io = require('socket.io').listen(server);
server = server.listen(8080);

显然,
listen
命令用一些附加功能包装了服务器对象。我最初发布的速记示例确实有效,因为
listen
链接到服务器变量的最终返回。有趣的细微差别。

正在安装哪个版本的express和socket.io?我刚刚完成了您所做的步骤,静态资产和socket.io.js都可以正常工作。客户端socket.io.js是动态生成的,它不应该与express静态服务器有任何关系。我可以得到更多关于失败路线的信息吗?检查如果您转到或(将8000替换为您运行应用程序的端口号)会发生什么情况,与Timothy所说的相同…它在我的机器上工作。虽然在Windows中,我不得不按如下方式更改静态文件的路径:uu dirname+'/public'(删除了点)很高兴提供帮助!这真是一个奇怪的问题,我仍然有点困惑。有人知道.listen()函数实际返回什么吗?我假设它返回对调用它的http.Server对象的引用(以方便链接)。它返回的对象似乎有一些类似于http.Server对象的方法,但并不完全相同。不幸的是,文档没有指定退货的性质。