0

我是新手socket.io。听起来不错,但对我没有用。

我在下面列出了两个文件:app.jsindex.html. 我将它们都放在同一个目录中。我cd到那个目录并运行:

node app.js

然后我去我的浏览器访问http://hostname:8888,我得到:

Cannot GET /

所以我尝试http://hostname:8888/index.html得到:

Cannot GET /index.html

为什么它不起作用,为什么我得到

npm ERR! invalid: socket.io-client@0.9.11

请有人帮忙。谢谢你。

// app.js
var express = require('express')
, http = require('http');

var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

app.configure(function() {
  app.use(express.static(__dirname + '/public'));
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

server.listen(8888);
// index.html
<!DOCTYPE html>
<html lang=en-ca>
  <head>
    <meta charset=utf-8>
    <title>To Do List</title>
  </head>
  <body>
    <script src="http://localhost:8888/socket.io/socket.io.js"></script>
    <script>
      var socket = io.connect('http://localhost:8888');
    </script>
  </body>
</html>
npm ERR! invalid: socket.io-client@0.9.11 /home/username/node_modules/socket.io-client
npm ERR! not ok code 0
4

1 回答 1

0

你写你的app.jsand index.html

我将它们都放在同一个目录中。

但是你的代码说:

app.use(express.static(__dirname + '/public'));

这基本上意味着:“我的index.html文件应该在一个名为的目录中找到,该目录public可以在与app.js"相同的目录中找到。所以它期待这个目录结构:

directory/app.js
directory/public/index.html

所以要么创建一个public目录并将你的移动到index.html那里,要么告诉express.static在同一个目录中找到它,如下app.js所示:

app.use(express.static(__dirname));

(尽管,正如@josh3736 在评论中指出的那样,这会引入安全问题,因此您不想在任何生产代码中使用该解决方案!但出于测试目的,没关系。)

至于您的其他问题,目前尚不清楚导致该错误的原因。请添加更多npm输出。

socket.io-client但是,如果socket.io要从浏览器运行客户端,则不需要安装该软件包,因为它已经是软件包的一部分socket.io(该-client软件包旨在用于从 Node 本身实现客户端)。

于 2013-05-24T15:56:30.320 回答