5

这让我发疯......虽然我有一个 Express + Socket.io 的工作版本,但我似乎无法通过在新项目文件夹中安装开箱即用的 NPM 来重现它。谁能指出我错过了什么......?这是我的过程:

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

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);

我的public文件夹包含我的应用程序的静态资产。我的公共索引 HTML 页面包含一个脚本标记,用于:

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

最后,我运行我的服务器脚本并在 Web 浏览器中访问应用程序。我的静态公共文件都得到了正确的服务,但是我得到了 404 的/socket.io/socket.io.js. 现在,我可以从另一个旧项目中换入一个express包并让整个系统正常工作。不知何故,该包实例的配置不同,但我不知道如何重现它。Express 网站提到了一些关于安装依赖项的内容,尽管运行npm install -d似乎没有帮助(pwd在运行时我是否需要特定的东西npm install -d?)。我想在使用 NPM 安装新的 Express 实例后,我一定遗漏了一些重要的东西。

感谢您的任何见解!

4

1 回答 1

7

好的,所以我的示例实际上是我的代码的缩写,并且该示例代码确实有效。我有问题的真实代码有点混乱,如下所示:

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命令用一些附加功能包装了服务器对象。我最初发布的速记示例实际上确实有效,因为listen它链接到最终返回到服务器变量中。有趣的细微差别。

于 2012-06-27T20:14:57.337 回答