3

https://github.com/mrdoob/three.js/wiki/How-to-run-things-locally建议本地服务器提供three.js 示例。python SimpleHTTPServer 对我来说很好,除了我需要在 three.js 存储库克隆中的示例目录上方的目录中运行它。

现在我尝试在 node.js 中使用 httpServer 提供相同的示例。我可以使用 SimpleHTTPServer 的节点版本之一,但我需要一个 httpServer 对象来通过 socket.io 将数据从服务器传递到 webgl 浏览器示例。所以我拿了 socket.io 的例子,并尝试使用上面示例目录中的节点运行以下server.js

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')

app.listen(8080);

function handler (req, res) {
  fs.readFile(__dirname + '/examples/webgl_interactive_voxelpainter.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

Net 是在 127.0.0.1:8080 和节点上,我看不到three.js 示例。即使我删除了对 socket.io 的所有引用,该代码也不起作用,这表明它与 html 有关。

  1. 我错过了什么?正在正确读取 html 文件,因为我没有收到回调错误。

  2. 我注意到 python 服务器将目录列为浏览器中的 html 链接。我单击示例以查看 html 文件,然后单击 html 文件,它工作正常。所以我尝试运行'node server.js'一个目录级别,几乎所有正斜杠和反斜杠的组合,根目录引用,......无济于事。

  3. 我没有挂断纯httpServer。如果 express 或其他东西适用于 socket.io 和 three.js,我会登上那列火车。

4

1 回答 1

2

使用连接框架,让您的工作更轻松。

var connect = require('connect');

var app = connect()
   .use(connect.static('<your directory>'))
   .use(function(req, res){
     res.end();
   })
   .listen(8080);

http://www.senchalabs.org/connect/

https://github.com/senchalabs/connect

于 2012-09-20T11:14:13.310 回答